在 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')
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')