模型继承,ForeignKey,获取正确的对象

时间:2013-08-01 09:58:38

标签: django django-models

我遇到了django模型和继承问题。

我定义了一个仪表板和一个模块列表,如下所示:

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列表,而不是自定义。我理解为什么,但这是一个问题。

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

2 个答案:

答案 0 :(得分:1)

Django不会自动降低模型。我发现Jeff Elmore on the automatic downcasting of models的帖子很有帮助。在其中,他提到django-model-utilsdjango-polymorphic-models以及提供自己的解决方案(https://bitbucket.org/Enzondio/django-model-utils/overview)。

答案 1 :(得分:0)

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

检查以下链接: