У меня есть такая модель
class UserRating(models.Model):
product = models.OneToOneField(Product, on_delete=models.CASCADE, null=True)
rate = models.PositiveSmallIntegerField()
status = models.BooleanField(default=False)
Я оцениваю ее в диапазоне от 1 до 4, где 4 отлично, 3 очень хорошо, 2 хорошо, 1 плохо, и я должен получить подсчет рейтинга в соответствии с номером, данным пользователем. Я использую SerializerMethodField
, как это
def get_excellent(self, obj):
return models.UserRating.objects.filter(rate=4, status=True).count()
def get_very_good(self, obj):
return models.UserRating.objects.filter(rate=3, status=True).count()
def get_good(self, obj):
return models.UserRating.objects.filter(rate=2, status=True).count()
def get_bad(self, obj):
return models.UserRating.objects.filter(rate=1, status=True).count()
, но это плохая идея, потому что четыре раза она попадает в БД. Я ищу лучший способ сделать это. Есть ли помощь, пожалуйста!
Заранее спасибо!