2013-04-05 32 views
2

我有这样的设置:如何获得django中所有相关对象的独特集合?

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

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

我想这样做的是让所有不同MODELA的是ModelB的有一个列表。例如我的数据库是这样的:

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]。

在一个地方,我想要的只是列表的数量,实际上,但我认为如果我能得到列表中的数字并不重要。

回答

3

可以使用的reverse lookupsand distinct

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

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

+1

这只有在PostgreSQL后端正在使用时才有效。 – Ngenator 2013-04-05 19:21:49

+0

我正在使用postgre,因为它发生。买为什么? – 2013-04-05 19:28:29

+0

这只是一个在其他后端不可用的功能。 – Ngenator 2013-04-05 19:38:56

相关问题