2011-11-10 75 views
0

我想使用Django管理员允许基本管理页面菜单。我有一个主菜单,我决定使用子菜单进行扩展,以便在必要时进行下拉菜单。由于子菜单项与主菜单项I具有相同的字段,但使用继承是一个好主意,因此子菜单将继承主菜单中的所有字段,并具有外键关系,如下所示:Django模型继承数据保存在这两个模型

# 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" 

我注册的模型与管理,但是当我在子菜单中保存项目,它不仅进入子菜单它使在主菜单中同一条目。任何ide我做错了什么?我是否需要以某种方式告诉Django我继承了MainMenu的方法而不保存到它?任何帮助非常感谢。

回答

2

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

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

+0

yeps,这就是继承在Django中的工作原理。所以你必须选择最适合你的东西:继承或外键。使用他们两个只是没有意义 – juliomalegria

+0

我想我会通过避免创建基类节省一些时间,但实际上它非常快。这绝对是做到这一点的方法。感谢所有有用的输入! –