我正在尝试使用Django管理员来允许页面菜单的基本管理。我有一个主要的菜单,我决定扩展一个子菜单,以便在必要时下降。因为子菜单项与主菜单项具有相同的字段,但是使用继承是个好主意,因此子菜单将继承主菜单中的所有字段以及具有如下的外键关系: / p>
# main menu
class MainMenu(models.Model):
title = models.CharField(max_length=50)
url = models.URLField()
def __unicode__(self):
return self.title
class Meta:
verbose_name_plural = "Main Menu Items"
# submenu - for drop downs
class SubMenu(MainMenu):
main_menu = models.ForeignKey(MainMenu, related_name='+', null=True, blank=True)
class Meta:
verbose_name_plural = "Sub Menu Items"
我使用管理员注册模型,但是当我在子菜单中保存项目时,它不仅会进入子菜单,而且会在主菜单中显示相同的条目。我有什么想法吗?我是否需要以某种方式告诉Django我继承MainMenu的方法而不保存它?任何帮助非常感谢。
答案 0 :(得分:2)
但这就是模型继承的工作原理。 SubMenu与MainMenu有一个隐含的OneToOne关系,但“继承”字段实际上属于MainMenu。
您可以做的是定义BaseMenu抽象模型 - 在内部Meta类中使用abstract = True
。现在MainMenu和SubMenu都继承了它,但是SubMenu添加了它的main_menu
链接。