在Django中过滤掉反向设置长度的模型

时间:2015-12-18 01:01:35

标签: django

我有模特:

class A(models.Model):
    b = models.ForeignKey(B)

class B(models.Model):
    pass

class C(models.Model):
    b = models.ForeignKey(B)
    bar = models.IntegerField()  # Or any other field

class C(models.Model):

我需要按照C.bar的值过滤的b的c_set的长度来过滤A.现在我有:

for a in A.objects.all():
    if len(a.b.c_set.filter(bar=1234)) == 0:
        continue
    # Code for needed 'a'

如何过滤' A'只有一个数据库请求?我有其他过滤器用于' A'我需要将它们与新的结合起来。像这样:

A.objects.annotate(newfilter=Count(b__c_set__bar=1234)).filter(**{
    'newfilter__gt': 0,
    # My filters
})

1 个答案:

答案 0 :(得分:0)

A.objects.filter(b__c__bar=1234).distinct().filter(**{
    # My filters
})