Модель Django с отношением Foreign Key и ManyToMany к одной модели - PullRequest
5 голосов
/ 12 сентября 2011

У меня есть модель django следующим образом:

class Subscription(models.Model):
    Transaction = models.ManyToManyField(Transaction, blank=True, null=True)
    User = models.ForeignKey(User)
    ...etc...

Я пытаюсь добавить поле ManyToMany к модели пользователя следующим образом:

    SubUsers = models.ManyToManyField(User, blank=True, null=True)

, но я получаю эту ошибку, когдаЯ запускаю syncdb:

AssertionError: ManyToManyField(<django.db.models.fields.related.ForeignKey object at 0x19ddfd0>) is invalid. First parameter to ManyToManyField must be either a model, a model name, or the string 'self'

Если я заключаю пользователя в кавычки, я получаю вместо этого:

sales.subscription: 'User' has a relation with model User, which has either not been installed or is abstract.

Я знаю, что модель пользователя импортирована правильно.Любые идеи, почему наличие 2 полей, указывающих на модель пользователя, вызывает проблемы?Заранее спасибо ...

1 Ответ

8 голосов
/ 12 сентября 2011

Причина, по которой он не работает, заключается в том, что имя вашего поля совпадает с именем класса (Пользователь).Используйте строчные имена полей, это стандартное соглашение в Django и Python.См. Стиль кодирования Django

Кроме того, вам необходимо добавить параметр related_name в ваши отношения:

class Subscription(models.Model):
    user = models.ForeignKey(User)
    sub_users = models.ManyToManyField(User, blank=True, null=True, related_name="subscriptions")
...