我正在使用投票模型,它可以通用链接到几个不同的模型(允许您对不同的事物进行投票)。在我的一些代码中,我使用注释来计算查询集的总投票数和正投票数。我注意到如果我对某个项目进行投票,那么具有相同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上打开了一个错误(我想下次我会先搜索)。我会为后人留下这个/也许有人可以找出解决方法。
答案 0 :(得分:0)
我最终的解决方案是从投票对象中获取投票计数,然后将其附加到Model#对象,而不是使用Model#对象上的注释。这将需要做,直到描述中提到的票据被处理。