【发布时间】:2014-01-08 22:51:30
【问题描述】:
我有一定数量的对象和用户。用户可以为一个或多个主题投票。我想制作一个视图,以降序显示按票数排序的前 10 个主题。
事实上,我找到了一种可行的方法,但我在问自己是否有更合适的方法来做到这一点。
我从模型开始:
class Subject(models.Model):
text = models.TextField()
class User(models.Model):
name = models.CharField(max_length=64)
subject = models.ManyToManyField(Subject)
现在我可以打字了:
Subject.user_set.all()
我会得到那些为该主题投票的用户。
现在我想制作一个列表视图,其中将显示按投票数排序的前 10 个主题。 所以我在Subject类中添加了一个类方法:
class Subject(models.Model):
text = models.TextField()
@staticmethod
def by_votes():
myList = list(Subject.objects.all())
return sorted(myList, key=lambda s: s.user_set.count(), reverse=True)[:10]
并定义了基于类的视图:
class SubjectListView(ListView):
model = Subject
template_name = "subject_list.html"
context_object_name = "subject_list"
queryset = Subject.by_votes()
实际上效果很好。 但是我在文档 Manager 和 QuerySet 类中看到了,不幸的是我不太了解如何使用它们(定义自定义类)来获得我正在寻找的东西(不处理原始 SQL 查询)。
我有点害怕,因为我使用的列表可能会遇到大量主题的记忆问题。 你会说什么,使用自定义 Manager oder QuerySet 会更合适,不是吗? 如果是,怎么做?
还有其他的想法吗?
谢谢! 彼得
【问题讨论】:
标签: django view model relation sorted