这是models.py
class CompetitionEntry(models.Model):
    submitter = models.ForeignKey(User)
    pic = models.ImageField(upload_to=images, blank=True, null=True)
class CompetitionEntryVote(models.Model):
    voted_entry = models.ForeignKey(CompetitionEntry)
class Entrylikes(models.Model):
    ip_address    = models.IPAddressField()
    liked_entry   = models.ForeignKey(CompetitionEntry)
这是views.py(我认为问题就在这里)
def show_all_entries(request, id):
    entries = CompetitionEntry.objects.filter(competition__id__exact=comp.id).annotate(vote_count=Count('competitionentryvote'), likes_count=Count('entrylikes'))
    return render(request, "show_all.html", {
        "entries": entries,
        })
显示全部.html
{% for item in entries %}
Votes = {{item.vote_count}}   Likes= {{item.likes_count}}
{% endfor %}
这里的问题是输出中的投票和喜欢都是相同的。i,e 投票=喜欢=喜欢
如果我重写视图以仅显示投票或点赞之一,则该页面可以完美运行。
在views.py中,如果我使用的话entries = CompetitionEntry.objects.filter(competition__id__exact=comp.id).annotate(vote_count=Count('competitionentryvote')).annotate(likes_count=Count('entrylikes'))  ,我会得到与上面1相同的结果
聚合Count通过映射到 SQLCOUNT()表达式来工作。请参阅此处的文档。
由于您提供的查询只会为整个查询生成一组行,因此 的值COUNT()在您的情况下可能相同。您可以尝试distinct=True按照文档中的建议进行设置:
如果distinct=True,则计数将仅包括唯一实例。这在 SQL 中相当于 COUNT(DISTINCT )。默认值为 False。
IE
CompetitionEntry.objects.filter(...).annotate(vote_count=Count('competitionentryvote', distinct=True))
   .annotate(likes_count=Count('entrylikes', distinct=True))
| 归档时间: | 
 | 
| 查看次数: | 11828 次 | 
| 最近记录: |