我有这个设置:
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]。
在一个地方,我想要的只是列表的计数,实际上,但我想如果我可以得到列表计数它是微不足道的。
答案 0 :(得分:3)
您可以结合使用reverse lookups and distinct
ModelA.objects.filter(modelb__isnull=False).distinct("name")
您可以传递位置参数(*字段)以指定DISTINCT应应用的字段的名称。这转换为SELECT DISTINCT ON SQL查询。这是区别。对于正常的distinct()调用,数据库在确定哪些行是不同的时比较每行中的每个字段。对于具有指定字段名称的distinct()调用,数据库将仅比较指定的字段名称。