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

У меня есть три модели, и я хочу упорядочить Products.objects.all() по is_it_good из ProductsRating модели. Как я могу это сделать?

Я делал что-то вроде:

qs = Products.objects.annotate(
        biggest_rating = Max('productsrating__is_it_good')
    ).order_by('biggest_rating')

но затем я получаю ошибку "Cannot resolve keyword 'productsrating' into field"

models.py

class CusUser(AbstractUser):
   pass

class Products(models.Model):
   name = models.CharField(max_length=300)
   category = models.CharField(max_length=300)
   cost = models.IntegerField()

class ProductsRating(models.Model):
   is_it_good = models.IntegerField(validators=[MaxValueValidator(0), MinValueValidator(5)])
   whose_rated = models.ForeignKey(CusUser, on_delete=models.CASCADE)

Product и ProductRating не связаны через поле/ключ, поэтому вы не можете упорядочить объекты Product на основе ProductRating.

Вы можете модифицировать модель Product, чтобы включить ForeignKey в ProductsRatings следующим образом:

class Products(models.Model):
   name = models.CharField(max_length=300)
   category = models.CharField(max_length=300)
   cost = models.IntegerField()
   rating = models.ForeignKey(ProductsRating, on_delete=models.SET_NULL)

class ProductsRating(models.Model):
   is_it_good = models.IntegerField(validators=[MaxValueValidator(0), MinValueValidator(5)])
   whose_rated = models.ForeignKey(CusUser, on_delete=models.CASCADE)

Тогда ваш набор запросов будет выглядеть следующим образом:

qs = Products.objects.annotate(
        biggest_rating = Max('rating__is_it_good')
    ).order_by('biggest_rating')
Вернуться на верх