在Django模型中定义之前使用类

时间:2012-03-07 17:52:49

标签: python django

当我尝试syncdb时,我收到错误菜单不是有效的类名。

我如何解决这种关系案例:

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 个答案:

答案 0 :(得分:8)

来自the Django book

  

如果您需要在尚未使用的模型上创建关系   定义后,您可以使用模型的名称,而不是模型   对象本身:

E.g:

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

编辑:
正如Francis mentions(和the documentation中所写的那样):

  

哪个模型具有ManyToManyField并不重要,但您应该只将其放在其中一个模型中 - 而不是两个模型。

答案 1 :(得分:6)

其中一个模型有多个,另一个使用Django的反向关系(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()