Как я могу упорядочить набор запросов по данным другой модели?
У меня есть три модели, и я хочу упорядочить 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')