Я новичок в Django, и ORM для меня немного сложен,
У меня есть страница поиска с запросом и несколькими фильтрами критериев, а get_queryset выглядит следующим образом (это app store):
def get_queryset(self):
... filter object list based on GET parameter...
return object_list.annotate(
rating=Avg('reviews__stars'),
downloads=Count('order_history', distinct=True),
flag1_rate=100*Count(
'reviews',
filter=Q(reviews__status=Review.FLAG1)
) / (Count(
'reviews',
filter=Q(reviews__status=Review.FLAG2)
) + Count(
'reviews',
filter=Q(reviews__status=Review.FLAG1)
))
).order_by(ordered_sort)
Как видите, я дважды запрашиваю Count
из FLAG1
(не настоящее имя, но, как вы понимаете, я вычисляю соотношение между двумя флагами, которые пользователи указывают во время обзоров, используя 100*FLAG1/(FLAG1+FLAG2)
):
Count(
'reviews',
filter=Q(reviews__status=Review.FLAG1)
)
Как я могу предотвратить это? есть ли способ сохранить его в переменной для аннотации?