在Django中,如何将引用模型的所有模型联接到一个表中?

2024-10-04 05:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个Django模型,它们引用使用外键的模型:

class LocationHistory(models.Model):
    region = models.ForeignKey(WorldGrid)
    ...

class UserSynthVals(models.Model):
    region = models.ForeignKey(WorldGrid)
    ...

class RegionalVictoryRate(models.Model):
    region = models.ForeignKey(WorldGrid)
    ...

WorldGrid就是:

^{pr2}$

现在,我可以通过以下方式获得引用WorldGrid的所有模型:

^{3}$

在这一点上,我可以循环查看他们的model.objects.all().values(),但我无法找到将这些单独的对象列表联接到一个可以输出到表中的方法。在

我宁愿按照django的预期用途做一些事情(比如select_related()所做的),并保持抽象。在

任何帮助解决这个问题的人都会很感激,或者是一个新的尝试方向。在


Tags: django模型modelmodels方式region外键class
3条回答

我找到了一个很好的方法来做到这一点,与select_相关的的确是关键。一旦我有了参考模型的列表,我可以:

fields_that_reference = [[m._meta.object_name.lower()+'__'+f.name for f in m._meta.fields if not isinstance(f,related.ForeignKey) ] for m in models_that_reference]

for i in fields_that_reference:
    fields +=i

一次获取所有要查看的字段,然后:

^{pr2}$

把他们都列在一个大名单里。如果您的模型是历史性的(带有日期时间字段),或者有循环的外键,那么在显示结果之前,您可能需要对结果进行更多的修剪,但是这样可以很好地将所有内容组合在一起。在

我想你可以用过滤器。您需要将WorldGrid连接到其相关模型,并过滤掉没有连接的地方。在

WorldGrid.objects.filter( regionalvictoryrate_region__isnull=False,
                      usersynthvals_region__isnull=False,
                      locationhistory_region__isnull=False )

请看这里的注释。 https://docs.djangoproject.com/en/dev/topics/db/queries/

在过去,我修改并使用了管理器中的get_deleted_objects函数django.contrib.admin.util若要执行此操作,请返回所有相关对象并以某种形式显示或操作它们。这可能是一个很好的开始去完成你想要的。在

相关问题 更多 >