Как использовать order_by с пользовательской функцией в модели
В модели MemberProduct
у меня есть функция get_member_rating
, где пользователь может выставить оценку своему продукту.
Поэтому в представлении я хочу отсортировать рейтинги продуктов этого пользователя, используя функцию в MemberProduct
или любым другим способом можно сделать набор запросов тогда order_by
member_rating
.
MemberProduct model
class MemberProduct(TimeStampedModel):
member = models.ForeignKey(
"accounts.Member",
related_name="member_product",
on_delete=models.CASCADE,
)
product = models.ForeignKey(
Product, related_name="member_product", on_delete=models.CASCADE
)
<some other fields>
class Meta:
unique_together = (
"member",
"product",
)
def get_member_rating(self):
try:
vote = Vote.objects.get(member=self.member, product=self.product)
except Vote.DoesNotExist:
return None
else:
return vote.rating
Модель голосования
class Vote(models.Model):
rating = models.FloatField(
validators=[MinValueValidator(0), MaxValueValidator(10)]
)
product = models.ForeignKey(
Product, related_name="votes", on_delete=models.CASCADE
)
member = models.ForeignKey("accounts.Member", on_delete=models.CASCADE)
class Meta:
unique_together = ["product", "member"]