У меня есть простой класс Product and Rating, например:
class Product(models.Model):
name = ...
price = ...
class Rating(models.Model):
product = models.ForeignKey("Product", ...)
score = models.PositiveSmallIntegerField(...)
Теперь я хочу получить список всех товаров и средний рейтинг для каждого товара.Просто получить все продукты просто:
product_list = Product.objects.all()
Если у меня есть один продукт, и я хочу получить среднюю оценку для этого продукта:
product = get_object_or_404(Product, pk=product_id)
ratings = Rating.objects.filter(product=product)
product_avg_rating = ratings.aggregate((Avg("score")))
Но давайте предположим, что я хочуперечислите все продукты и их средний рейтинг.Это звучит так, как будто это довольно сложный ресурс.Так каков наилучший способ решить эту проблему?Должен ли я создать метод класса для класса Product, который просто возвращает среднее значение, чтобы я мог затем вызвать его в шаблоне:
{{ product.get_average_rating }}
Или есть лучший способ сделать это?Я не совсем уверен, что делать здесь, и мне нужно какое-то руководство.
Заранее большое спасибо!
РЕДАКТИРОВАТЬ: я думаю, что я не достаточно ясно с моим объяснением, так что вотфактический пример.Допустим, у меня есть набор запросов, отфильтрованный слагом (который является просто поисковым термином):
products = Product.objects.filter(tags__name__in=[slug])
Теперь, как я могу добавить средний рейтинг к КАЖДОМУ ОДНОМУ продукту, чтобы я мог сделать это в шаблоне:
{% for product in products %}
{{ product.avg_rating_score }}
{% endfor %}