Django,ModelManager,带有基于model属性的查询

时间:2014-05-31 11:46:51

标签: python django

我有这个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属性订购的第一个项目?这样做的正确方法是什么?还有更好的方法吗?感谢。

1 个答案:

答案 0 :(得分:0)

如图所示,您可以按照属性或方法的结果进行排序。

但是在这种情况下你不需要,因为你可以通过聚合更好更有效地做到这一点:

from django.db.models import Count

self.annotate(likes_count=Count('like')).order_by('likes_count')