Как написать 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'
)