我有这个models.py:
class PieceManager(models.Manager):
def top_ten(self):
# return self.get_queryset().order_by(total_likes)
# How can I get the first n-items ordered by the property total_likes?
class Piece(models.Model):
name = models.CharField(max_length=250)
description = models.TextField(blank=True, null=True)
museum = models.ForeignKey(Museum, blank=True, null=True)
objects = PieceManager()
@property
def total_likes(self):
return self.likes.count()
class Like(models.Model):
created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)
piece = models.ForeignKey(Piece, blank=True, null=True, related_name="likes")
如何获得total_likes属性订购的第一个项目?这样做的正确方法是什么?还有更好的方法吗?感谢。
答案 0 :(得分:0)
如图所示,您可以按照属性或方法的结果进行排序。
但是在这种情况下你不需要,因为你可以通过聚合更好更有效地做到这一点:
from django.db.models import Count
self.annotate(likes_count=Count('like')).order_by('likes_count')