Как написать Django запрос, чтобы получить все объекты в порядке убывания в соответствии с двумя числовыми полями?

Я использую Django. Я пытаюсь написать запрос по самым рейтинговым товарам. У меня есть таблица товаров. как вы можете видеть ниже.

class Product(models.Model):
    user = models.ForeignKey(User, verbose_name=_("Owner"), on_delete=models.CASCADE)
    name = models.CharField(_("Name"), max_length=150,null=True)  
    average_rating  =models.DecimalField(_("average rating"), max_digits=10, decimal_places=2,null=True,blank=True)
    total_reviews = models.IntegerField(_("total reviews "),default=0,null=True,blank=True)
    is_remove = models.BooleanField(_("Remove"), default=False)
    create_time = models.DateTimeField(_("Create time"), default=timezone.now)

Теперь я хочу получить все объекты, у которых самый высокий средний рейтинг и общий счетчик.

Я пробовал многие вещи, описанные ниже. но ни одна из них не сработала.

1 -

 def get_all_top_rated_products(self):
     query = self.filter(is_remove=False).order_by("total_reviews","average_rating")
     print(query)
     return query 

2

 def get_all_top_rated_products(self):
     query = self.filter(is_remove=False).aggregate(Max('average_rating'),Max('total_reviews'))
     print(query)
     return query 

Вы должны упорядочить в по убыванию, вы можете сделать это с помощью префикса имени поля с минусом (-):

def get_all_top_rated_products(self):
    return self.filter(is_remove=False).order_by(
        '-average_rating', '-total_reviews'
    )
Вернуться на верх