2013-08-01 81 views
0

我有一个django模型和继承的问题。模型继承,ForeignKey,得到正确的对象

我定义的仪表板和这样的模块列表:

class Dashboard(models.Model): 
    name = models.CharField(max_length=255) 


class DashboardModule(models.Model): 
    dashboard = models.ForeignKey(Dashboard, related_name='modules') 
    position_line = models.IntegerField(default=1) 
    position_col = models.IntegerField(default=1) 

    def render(self): 
     return 'hehe' 

class Custom1DashboardModule(DashboardModule): 
    #custom fields and methods 
    def render(self): 
     return 'toto' 

class Custom2DashboardModule(DashboardModule): 
    #custom fields and methods 
... 

我用这样的代码:

dashboard = Dashboard() 
dashboard.name = 'my dashboard' 
dashboard.save() 

module = Custom1DashboardModule() 
module.dashboard = dashboard 
module.save() 

module = Custom2DashboardModule() 
module.dashboard = dashboard 
module.save() 

然后当我做

dashboard.modules.all() 

我得到DashboardModule的列表,而不是自定义的。我明白为什么,但这是一个问题。

有没有解决我的问题的解决方案?也许我必须重新考虑这个架构?

+0

显示更多您的代码。像这样,我们不明白问题是什么。 dashboard.modules.all()中的'dashboard'是什么? Dashboard模型的内容是什么? – rednaw

+0

谢谢,我修复并改进了这个问题。 –

+0

那么'dashboard'上的'modules'定义在哪里?我在你的代码中看不到它。 – rednaw

回答

0

这看起来很奇怪。你为什么要在这里继承工作?在Django中,每个模型都是数据库中的一个表格(或者几乎每个模型都是,除非它的元设置中有abstract=True)。您的查询会产生正确的结果(假设您已更改的objects标准管理器),因为唯一与Dashboard相关的内容是DashoardModule。根据你想要的数据库的外观重新思考架构。

检查以下几个环节: