【发布时间】:2012-01-23 03:56:01
【问题描述】:
我正在制作一个带有 cmets 的 django 应用程序,并以 stackoverflow 或 reddit 风格对这些 cmets 进行投票。选择 cmets 时,我想知道总投票数,以及用户是否对这个特定评论进行了投票。我可以像这样使用 annotate 来计算总计数:
video_comments = Comment.objects.filter(video_id=video_id).annotate(vote_sum=Sum('commentvote__value'))
我还可以对部分评论投票进行注释吗?比如:
.annotate(user_vote=Sum('commentvote__value').filter(commentvote__user == user))
作为参考,这是我的模型:
class Comment(models.Model):
video_id = models.CharField(max_length=12, db_index=True)
video_time = models.FloatField()
comment = models.TextField(max_length=MAX_COMMENT_LENGTH)
datetime = models.DateTimeField(auto_now_add = True)
user = models.ForeignKey(User)
class CommentVote(models.Model):
comment = models.ForeignKey(Comment, db_index=True)
value = models.IntegerField() # Should be 1 or -1
datetime = models.DateTimeField(auto_now_add = True)
user = models.ForeignKey(User, db_index=True)
【问题讨论】:
-
您可能希望将
unique_together = ('comment', 'user')添加到CommentVote。此外,在 MySQL 和 PostgreSQL 中,ForeignKeys上的db_index不是必需的。 -
谢谢托马斯!我错过了 unique_together。
标签: django django-models django-queryset