Используйте класс до его определения в модели Django - PullRequest
4 голосов
/ 07 марта 2012

Когда я пытаюсь выполнить синхронизацию, я получаю сообщение об ошибке. Меню не является допустимым именем класса.

Как мне разрешить этот случай отношения:

class MenuItem(model.Models)
    title = models.CharField(max_length=200)
    submenus = models.ManyToManyField(Menu, blank=True, null=True)

class Menu(Container):
    links = models.ManyToManyField(MenuItem)

Ответы [ 2 ]

8 голосов
/ 07 марта 2012

С Книга Джанго :

Если вам нужно создать отношения на модели, которая еще не была определено, вы можете использовать название модели, а не модель сам объект:

например:.

class MenuItem(model.Models)
    title = models.CharField(max_length=200)
    submenus = models.ManyToManyField('Menu', blank=True, null=True)
                                      ^    ^

Edit:
Как Фрэнсис упоминает (и как написано в документации ):

Неважно, какая модель имеет ManyToManyField, но вы должны поместить ее только в одну из моделей, а не в обе.

6 голосов
/ 07 марта 2012

Одна из этих моделей имеет много ко многим, другая использует обратные соотношения Джанго (https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward)

Итак, как бы я это настроил:

class Menu(Container):
    links = models.ManyToManyField(MenuItem)

class MenuItem(model.Models)
    title = models.CharField(max_length=200)

Тогда, когда я хотел Меню MenuItem:

menu_item_instance.menu_set.all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...