Все еще новичок, я должен адаптировать сценарий Django (v1.10).Оригинальный сценарий использует «инициативу» основного класса, которая может иметь любое количество «сторонников».
Адаптации, которые я должен сделать, включают в себя наличие другого основного класса, называемого «политика» и «инициатива» (аналогичное поведение, различные области).Я застрял с ManyToManyField на «инициативе» и «политике», которые должны указывать на Сторонников, где я пытаюсь использовать GenericRelation для поддержки обоих основных классов.Я получаю следующее сообщение об ошибке:
initproc.Supporter: (fields.E336) The model is used as an intermediate model by 'initproc.Initiative.supporters', but it does not have a foreign key to 'Initiative' or 'User'.
initproc.Supporter: (fields.E336) The model is used as an intermediate model by 'initproc.Policy.supporters', but it does not have a foreign key to 'Policy' or 'User'.
Мой models.py
(все удалено несущественно) ДО:
# ------------------------------ Initiative ------------------------------------
class Initiative(models.Model):
supporters = models.ManyToManyField(User, through="Supporter")
# ------------------------------- Supporter -------------.----------------------
class Supporter(models.Model):
class Meta:
unique_together = (("user", "initiative"),)
user = models.ForeignKey(User)
initiative = models.ForeignKey(Initiative, related_name="supporting")
и ПОСЛЕ моих изменений:
# ------------------------------- Supporter ------------------------------------
class Supporter(models.Model):
class Meta:
unique_together = (("user", "target_type", "target_id"),)
user = models.ForeignKey(User)
target_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
target_id = models.IntegerField()
target = GenericForeignKey('target_type', 'target_id')
# -------------------------------- Policy --------------------------------------
class Policy(PolicyBase):
supporters = models.ManyToManyField(User, through="Supporter")
# ------------------------------ Initiative ------------------------------------
class Initiative(models.Model):
supporters = models.ManyToManyField(User, through="Supporter")
который выбрасывает вышеуказанную ошибку.Я думаю, я понимаю, что проблема не в ключе ForeignKey для пользователя (не изменилась), а в моей попытке заставить Supporter работать как для Initiative, так и для Policy.Я мог только найти through_fields
в поисках исправления, но я думаю, что я также смотрю в неправильном месте.
Вопрос:
Как я могу установить GenericForeignKey, указывающий на несколько классов на ManyToManyField?Я также хотел бы знать, куда мне теперь поместить параметр related_name.