我是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存储一些核心数据。元是与A中每个条目相对应的元数据。问题是,经常出现,当我需要访问A的条目和关联的元数据条目时,例如,我可能要打印一个摘要表:

________________________
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对象。

关于python - Django:从多个关联模型连接数据的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27931865/

10-12 18:26
查看更多