【发布时间】:2009-09-13 04:56:50
【问题描述】:
我正在使用一个 Vote 模型,它通常可以链接到几个不同的模型(以便您对不同的事物进行投票)。在我的一些代码中,我使用注释来计算查询集的总票数和正票数。我注意到,如果我对某个项目进行投票,那么具有相同 id 的其他类型的模型也会显示它们已被投票(包括总票数和正票数)。如果我查看尚未投票的对象的投票列表,它会返回一个空列表(但注释仍然显示 +1)。
这里有一些代码:
class UserVote():
user = models.ForeignKey(User)
vote = models.SmallIntegerField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
class Model1():
votes = generic.GenericRelation(UserVote)
class Model2():
votes = generic.GenericRelation(UserVote)
并重现错误:
m1 = Model1()
m1.save()
m2 = Model2()
m2.save()
m1.votes.add(UserVote(user_id=1, vote=1))
Model2.objects.all().annotate(tot_votes=Count('votes__vote'))[0].tot_votes # Returns 1
Model2.objects.all().annotate(tot_votes=Count('votes__vote'))[0].votes.all() # Returns []
我不确定这是否是注释代码中的错误,或者我是否遗漏了一些额外的位来区分不同通用相关模型的投票。顺便说一句,我正在运行 Django 的主干版本。
编辑: http://code.djangoproject.com/ticket/10461 上似乎有一个错误(我想下次我会先搜索)。我将把它留给后代/也许有人可以找到解决方法。
【问题讨论】:
标签: django