在Django中排序数据的问题

时间:2014-03-26 15:42:31

标签: python django sorting

我有三个数据库模型,Story,StoryVote和Comment。

class Story(models.Model):
    user = models.ForeignKey(User)
    group = models.ForeignKey(Group, blank=True, null=True)
    date_added = models.DateTimeField(auto_now_add=True)
    date_modified = models.DateTimeField(auto_now=True)
    location = models.CharField(max_length=100)
    title = models.CharField(max_length=150)
    description = models.CharField(blank=True, null=True, max_length=2000)
    exp_text = models.TextField()

    def __unicode__(self):
        return self.title

class Comment(models.Model):
    user = models.ForeignKey(User)
    date_added = models.DateTimeField(auto_now_add=True)
    date_modified = models.DateTimeField(auto_now=True)
    emailOnReply = models.NullBooleanField(blank=True, null=True)
    comment_text = models.TextField()
    story = models.ForeignKey(Story, related_name="comments")

    def __unicode__(self):
        return self.comment_text

class StoryVote(models.Model):
    votes = models.IntegerField()
    story = models.ForeignKey(Story, related_name="votes")

    def __unicode__(self):
        return self.votes

我正在使用:

all_stories = Story.objects.all()

获取所有故事的详细信息,并使用此方法获取模板中的评论并计算每个故事的评论数量:

{% for story in all_stories %}
{{ story.title }}
{{ story.comments.all|length }}
{% endfor %}

并使用以下内容获得投票:

{% for story in all_stories %}
{{ story.title }}
{{ story.votes }}
{% endfor %}

这很好用,但我希望输出排序。 我已经阅读了很多方法来对数据进行排序但没有任何效果。 当然,我当然是使用order_by()函数,但因为我正在排序"评论"字段是另一个模型的相关字段,order_by函数通过对表格中的数据进行排序而工作,并且它不会对来自相关表格的数据进行排序,因此我得到各种重复项并且没有排序。

之后我想我会使用distinct函数,但是当你使用相关字段进行排序时它不起作用,所以也是如此。然后我尝试在模板本身中使用dictsort()函数,所以我获取了这样的必要数据:

commented = list()
i=0
for story in most_commented:
commented.append({'title': story.title, 'comments': story.comments.all().count()})
i = i + 1

并将带有dicts的列表发送到模板并调用dictsort()但是在调用该函数时没有任何反应:

commented|dictsort:"title"

所以我很失落了如何对这些数据进行排序。任何帮助都是适当的。

1 个答案:

答案 0 :(得分:0)

我很确定,{% regroup %} template-tag将是您的朋友。

查看章节“重新组合”和“分组其他属性”https://docs.djangoproject.com/en/dev/ref/templates/builtins/#regroup