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

Chr*_*ove 4 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)
Run Code Online (Sandbox Code Playgroud)

ber*_*nie 8

Django书中:

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

例如:

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

编辑:
正如弗朗西斯提到的那样(并且正如文档中所写):

具有ManyToManyField的模型无关紧要,但您应该只将其放在其中一个模型中 - 而不是两者.


Fra*_*llo 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)
Run Code Online (Sandbox Code Playgroud)

然后我想要一个MenuItem的菜单:

menu_item_instance.menu_set.all()
Run Code Online (Sandbox Code Playgroud)