Django 排除没有 values() 关键字的查询集
Django excluding a queryset without values() keyword
我有几个模型,但我的问题是关于其中两个模型,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 的所有值作为剩余代码。如果我使用 values(),我不能使用 set1 的 "c" 和 "d" 字段。
那么,有没有不缩小B字段的排除方法呢?
PS:我更喜欢远离新的查询。我知道我可以编写 B 对象的第二个查询来满足我的需要。
是的,您可以使用列表理解:
[obj.a for obj in queryset]
这将 return 一个包含查询集中所有对象的 a
属性的列表,而不修改它们。
我相信您要的是没有相关 B 的模型 A 的实例。
set2 = A.objects.filter(b__isnull=True)
我有几个模型,但我的问题是关于其中两个模型,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 的所有值作为剩余代码。如果我使用 values(),我不能使用 set1 的 "c" 和 "d" 字段。
那么,有没有不缩小B字段的排除方法呢?
PS:我更喜欢远离新的查询。我知道我可以编写 B 对象的第二个查询来满足我的需要。
是的,您可以使用列表理解:
[obj.a for obj in queryset]
这将 return 一个包含查询集中所有对象的 a
属性的列表,而不修改它们。
我相信您要的是没有相关 B 的模型 A 的实例。
set2 = A.objects.filter(b__isnull=True)