我有三个数据库模型,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"
所以我很失落了如何对这些数据进行排序。任何帮助都是适当的。
答案 0 :(得分:0)
我很确定,{% regroup %}
template-tag将是您的朋友。
查看章节“重新组合”和“分组其他属性”https://docs.djangoproject.com/en/dev/ref/templates/builtins/#regroup