Django аннотирует среднее значение внешней модели

#django #annotations

#django #аннотации

Вопрос:

Две модели, статья и обзор, отношение один ко многим (в одной статье много обзоров). В некоторых статьях нет обзора.

Я хочу упорядочивать статьи по рейтингам рецензирования, поэтому я использую аннотацию с помощью AVG:

 ArticleQueryset.annotate(rating=models.Avg('reviews__rating')).order_by('-rating')
  

Проблема в том, что в статьях без обзоров значение рейтинга равно False и каким-то образом оно предшествует максимальному рейтингу. В результате первые результаты не имеют никакого рейтинга, затем отображаются статьи с самым высоким рейтингом.

Ответ №1:

Используйте метод nulls_last=True в order_by() качестве

 ArticleQueryset.annotate(
    rating=models.Avg('reviews__rating')
).order_by(models.F('rating').desc(nulls_last=True))  

Комментарии:

1. Я получаю ошибку: у объекта набора запросов нет атрибута ‘desc’

2. desc если для F() выражения. Возможно, у вас опечатка