在django中过滤prefetch_related为空

And*_*unt 6 django django-models django-orm

class Topping(models.Model):
    name = models.CharField(max_length=30)

class Pizza(models.Model):
    name = models.CharField(max_length=50)
    toppings = models.ManyToManyField(Topping)
Run Code Online (Sandbox Code Playgroud)

是否有可能选择配有他们的浇头的比萨饼,但只有那些有一定数量浇头的比萨饼,比如0,1,2?

Ala*_*air 7

您可以通过注释查询集来过滤浇头数,然后对其进行过滤.

from django.db.models import Count

pizzas = Pizza.objects.annotate(
    num_toppings=Count('toppings'),
).filter(num_toppings__lt=3)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用prefetch_related与其他查询集相同的方式.

pizzas = Pizza.objects.annotate(
    num_toppings=Count('toppings'),
).filter(num_toppings__lt=3).prefetch_related('toppings')
Run Code Online (Sandbox Code Playgroud)