Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 模型继承,ForeignKey,获取正确的对象_Django_Django Models - Fatal编程技术网

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

Django 模型继承,ForeignKey,获取正确的对象,django,django-models,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.I

我对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()
我使用的代码如下:

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() 
我得到一个仪表板模块列表,而不是自定义的。我明白为什么,但这是个问题


有办法解决我的问题吗?也许我得重新考虑一下架构?

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

查看以下链接:


Django不会自动降级模型。我发现了一个有用的帖子。在其中,他提到并提供了自己的解决方案()。

显示更多代码。像这样,我们不明白问题是什么。
dashboard.modules.all()中的
dashboard
是什么?
仪表板
模型的内容是什么?谢谢,我已经修复并改进了这个问题。那么
仪表板
上的
模块在哪里定义?我在您的代码中没有看到它。模块在模块中定义为关键字related\u name:dashboard=models。ForeignKey(dashboard,related\u name='modules')谢谢,解决方案非常完美。在链接搜索“InheritanceManager”中