【问题标题】:Filter prefetch_related empty in django在 django 中过滤 prefetch_related 空
【发布时间】:2016-02-26 05:45:51
【问题描述】:
class Topping(models.Model):
name = models.CharField(max_length=30)
class Pizza(models.Model):
name = models.CharField(max_length=50)
toppings = models.ManyToManyField(Topping)
是否可以选择带有浇头的比萨,但只选择具有一定数量浇头的比萨,例如 0、1、2?
【问题讨论】:
标签:
django
django-models
django-orm
【解决方案1】:
您可以通过注释查询集来过滤浇头的数量,然后对其进行过滤。
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')