0

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

有解决我的问题的方法吗?也许我必须重新考虑架构?

4

2 回答 2

1

Django 不会自动向下转换模型。我发现Jeff Elmore 关于模型自动向下转换的帖子很有帮助。在其中他提到了django-model-utilsdjango-polymorphic-models并提供了他自己的解决方案(https://bitbucket.org/Enzondio/django-model-utils/overview)。

于 2013-08-01T10:34:36.197 回答
0

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

检查以下链接:

于 2013-08-01T10:06:59.447 回答