Django-如何使用ManyToManyField字段进行过滤?

时间:2018-09-18 13:38:00

标签: django django-models

模型

class Product(models.Model):
    ...
    options = models.ManyToManyField(Option, blank=True)

class Option(models.Model):
    ...

class ProductVariant(models.Model):
    ...
    product = models.ForeignKey(Product, on_delete=models.CASCADE) # parent product
    option = models.ForeignKey(Option, on_delete=models.DO_NOTHING, null=True)

我需要找到ProductVariant不属于父产品option上任何options的所有Product

我尝试执行以下过滤:

ProductVariant.objects.exclude(option_id__in=[o.pk for o in F('product__options')])

但是我遇到了以下异常:

'F' object is not iterable

1 个答案:

答案 0 :(得分:1)

尝试使用Count进行过滤:

ProductVariant.objects.annotate(product_count=Count('option__product')).filter(product_count=0)