Django:连接来自多个关联模型的数据的最佳方式
Django: Best way to join data from multiple, associate models
我是 Django 的新手,想编写符合其思想的代码。我查看之前是否有人问过这个问题,但找不到与我的用例相匹配的内容。我怀疑我只是不知道正确的术语。
情况很简单,涉及到Django的ORM。我有两个模型,例如:
class A(models.Model):
name = models.CharField()
class Meta(models.Model):
a = models.OneToOneField(A)
n_views = models.IntegerField()
created = models.DateField()
A存储了一些核心数据。 Meta 是对应于 A 中每个条目的元数据。问题是,当我需要访问 A 的条目和关联的元数据条目时,经常会出现这个问题 例如,我可能想打印一个摘要 table:
________________________
A |
name | created | n_views|
josh | 1/1/2000| 1 |
john | 2/2/2000| 4 |
________________________
我现在做的是这样的:
as = A.objects.all()
meta = [Meta.objects.filter(a__pk=a.pk) for a in as]
现在我有了我需要的所有数据,我可以手动将它们放在一个列表中:
data = []
for a,m in zip(as, meta):
data.append({'name': a.meta, 'created': m.created, 'n_views': m.n_views})
现在可以将此字典列表转发到我的模板。
这行得通,但对我来说似乎有点笨拙;如果 Django 没有更好的方法来处理这个问题,我会感到很惊讶。任何人都可以指出一种更简洁的方法吗?
谢谢!
你可以这样做:
objs = A.objects.select_related().all()
for a in objs:
print(a.name, a.meta.n_views, a.meta.created)
这将使 Django 构建一个查询,查询 A
对象和 Meta
对象。
我是 Django 的新手,想编写符合其思想的代码。我查看之前是否有人问过这个问题,但找不到与我的用例相匹配的内容。我怀疑我只是不知道正确的术语。
情况很简单,涉及到Django的ORM。我有两个模型,例如:
class A(models.Model):
name = models.CharField()
class Meta(models.Model):
a = models.OneToOneField(A)
n_views = models.IntegerField()
created = models.DateField()
A存储了一些核心数据。 Meta 是对应于 A 中每个条目的元数据。问题是,当我需要访问 A 的条目和关联的元数据条目时,经常会出现这个问题 例如,我可能想打印一个摘要 table:
________________________
A |
name | created | n_views|
josh | 1/1/2000| 1 |
john | 2/2/2000| 4 |
________________________
我现在做的是这样的:
as = A.objects.all()
meta = [Meta.objects.filter(a__pk=a.pk) for a in as]
现在我有了我需要的所有数据,我可以手动将它们放在一个列表中:
data = []
for a,m in zip(as, meta):
data.append({'name': a.meta, 'created': m.created, 'n_views': m.n_views})
现在可以将此字典列表转发到我的模板。
这行得通,但对我来说似乎有点笨拙;如果 Django 没有更好的方法来处理这个问题,我会感到很惊讶。任何人都可以指出一种更简洁的方法吗?
谢谢!
你可以这样做:
objs = A.objects.select_related().all()
for a in objs:
print(a.name, a.meta.n_views, a.meta.created)
这将使 Django 构建一个查询,查询 A
对象和 Meta
对象。