在 Django 中过滤 prefetch_related 为空

Filter prefetch_related empty in django

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

class Pizza(models.Model):
    name = models.CharField(max_length=50)
    toppings = models.ManyToManyField(Topping)

是否可以 Select 带有浇头的比萨饼,但只有那些有一定数量浇头的比萨饼,例如 0、1、2?

您可以通过注释查询集然后过滤它来过滤浇头的数量。

from django.db.models import Count

pizzas = Pizza.objects.annotate(
    num_toppings=Count('toppings'),
).filter(num_toppings__lt=3)

然后您可以像使用其他查询集一样使用 prefetch_related

pizzas = Pizza.objects.annotate(
    num_toppings=Count('toppings'),
).filter(num_toppings__lt=3).prefetch_related('toppings')