我有两个这样的模型
class A(models.Model):
x = models.CharField(blank=True, null=True, max_length=256)
y = models.CharField(blank=True, null=True, max_length=256)
class B(models.Model):
m = models.ManyToManyField(to=A, blank=True)
#other fields
class C(models.Model):
p = models.ManyToManyField(to=A, blank=True)
#other fileds
现在当我使用
query_b = models.B.objects.all()
我想从多对多查询集中排除这些对象,而不是 query_b 对象 'm',如果它们存在于 models.C.objects.all()
中并返回 query_b
答案 0 :(得分:0)
请试试这个并告诉我们,
query_b = models.B.objects.all()
for instances in query_b:
if(C.objects.filter(id=instances.id).exists()):
query_b.remove(instances)
现在 query_B 将只有 B 的实例,不包括 C
答案 1 :(得分:0)
如果我猜对了 - 首先查询 A
引用的所有可能的 C
对象,然后将它们从您的最终查询中排除:
queryset = models.C.objects.filter(p__isnull=False).values_list('p', flat=True).distinct()
query_b = models.B.objects.exclude(m__in=queryset)