【发布时间】:2019-05-17 01:27:09
【问题描述】:
我目前正在开发一个网站(使用 Django),人们可以在该网站上写一个故事,该故事可以由他们自己或其他人点赞。以下是 Profile、Story 和 Upvote 的类:
class Profile(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=30, null=True)
last_name = models.CharField(max_length=30, null=True)
class Story(models.Model):
author = models.ForeignKey('accounts.Profile', on_delete=models.CASCADE, related_name="author")
title = models.CharField(max_length=50)
content = models.TextField(max_length=10000)
class Upvote(models.Model):
profile = models.ForeignKey('accounts.Profile', on_delete=models.CASCADE, related_name="upvoter")
story = models.ForeignKey('Story', on_delete=models.CASCADE, related_name="upvoted_story")
upvote_time = models.DateTimeField(auto_now=True)
如您所见,Upvote 使用两个外键来存储支持者和相关故事。现在我想做一个查询,它给我所有的故事,按他们拥有的赞成票的数量排序。我已经尽力自己提出了一些问题,但这并不是我要搜索的内容。
这个根本不起作用,因为它只是按照它们的创建顺序给了我所有的故事,出于某种原因。它还包含重复项,尽管我希望它们按故事分组。
hot_feed = Upvote.objects.annotate(upvote_count=Count('story')).order_by('-upvote_count')
这种作品。但是,如果我试图访问我的模板中的一个特定故事,它只会给我返回 id。所以我无法从那个 id 中获取标题、作者和内容,因为它只是一个整数,而不是一个对象。
hot_feed = Upvote.objects.values('story').annotate(upvote_count=Count('story')).order_by('-upvote_count')
有人可以帮我找到我正在搜索的查询吗?
【问题讨论】:
-
请删除所有与此问题无关的字段(我们希望有最小示例)。
-
会的!谢谢
标签: django django-models django-templates django-views django-queryset