Django排除没有values()关键字的查询集

时间:2015-07-05 10:13:36

标签: django django-queryset

我有几个型号,但我的问题是其中两个,A和B.

class A(models.Model):
    ...

class B(models.Model):
    a = models.ForeignKey(A)
    c = models.CharField(...)
    d = models.ForeignKey(C)

我想要的只是排除这个查询集:

set1 = B.objects.all()

从查询集下方:

set2 = A.objects.all()

我知道我可以通过以下方式解决这个问题:

set1 = B.objects.all().values('a')
set2 = A.objects.all().exclude(pk__in = set1)

但我需要其余代码的set1的所有值。如果我使用值(),我不能使用" c"和" d" set1的字段。

那么,是否有任何方法排除而不缩小B的字段?

PS:我更喜欢远离新的查询。我知道我可以编写第二个B对象查询以满足我的需求。

2 个答案:

答案 0 :(得分:0)

是的,你可以使用列表理解:

[obj.a for obj in queryset]

这将返回一个列表,其中包含查询集中所有对象的a属性,而不进行修改。

答案 1 :(得分:0)

我相信你要求没有相关B的模型A的实例。

set2 = A.objects.filter(b__isnull=True)