2015-11-23 71 views
4
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中過濾prefetch_related空

回答

5

您可以通過對查詢集進行註釋,然後對其進行過濾來過濾澆注的數量。

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