Django模型继承数据在两个模型中都可以保存

时间:2011-11-10 17:43:37

标签: django inheritance

我正在尝试使用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的方法而不保存它?任何帮助非常感谢。

1 个答案:

答案 0 :(得分:2)

但这就是模型继承的工作原理。 SubMenu与MainMenu有一个隐含的OneToOne关系,但“继承”字段实际上属于MainMenu。

您可以做的是定义BaseMenu抽象模型 - 在内部Meta类中使用abstract = True。现在MainMenu和SubMenu都继承了它,但是SubMenu添加了它的main_menu链接。