我遇到了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列表,而不是自定义。我理解为什么,但这是一个问题。
有解决方案可以解决我的问题吗?也许我必须重新考虑这个架构?
答案 0 :(得分:1)
Django不会自动降低模型。我发现Jeff Elmore on the automatic downcasting of models的帖子很有帮助。在其中,他提到django-model-utils和django-polymorphic-models以及提供自己的解决方案(https://bitbucket.org/Enzondio/django-model-utils/overview)。
答案 1 :(得分:0)
这看起来很奇怪。你为什么要在这里继承?在django中,每个模型都是数据库中的表(或者几乎每个模型都是,除非它在元设置中有abstract=True
)。您的查询会产生正确的结果(假设您已更改了此处使用的objects
的标准modules
管理器),因为与Dashboard相关的唯一内容是DashoardModule。根据您希望数据库的外观重新考虑体系结构。
检查以下链接: