如何在django中获得所有相关对象的独特集合?

时间:2013-04-05 18:42:02

标签: django django-models

我有这个设置:

class ModelA:
    name = models.TextField('Name')

class ModelB:
    name = models.TextField('Name')
    a = models.ForeignKey(ModelA)

我想要的是获取ModelB所有不同ModelA的列表。例如,我的数据库如下所示:

a1 = ModelA(name='a1')
a2 = ModelA(name='a2')
a2 = ModelA(name='a3')
b1 = ModelB(name='b1', a=a1)
b2 = ModelB(name='b2', a=a1)
b2 = ModelB(name='b2', a=a3)

然后我希望查询的结果是[a1,a3]。

在一个地方,我想要的只是列表的计数,实​​际上,但我想如果我可以得到列表计数它是微不足道的。

1 个答案:

答案 0 :(得分:3)

您可以结合使用reverse lookups and distinct

ModelA.objects.filter(modelb__isnull=False).distinct("name")
  

您可以传递位置参数(*字段)以指定DISTINCT应应用的字段的名称。这转换为SELECT DISTINCT ON SQL查询。这是区别。对于正常的distinct()调用,数据库在确定哪些行是不同的时比较每行中的每个字段。对于具有指定字段名称的distinct()调用,数据库将仅比较指定的字段名称。