注释与GenericRelation不正确

时间:2009-09-13 04:56:50

标签: django

我正在使用投票模型,它可以通用链接到几个不同的模型(允许您对不同的事物进行投票)。在我的一些代码中,我使用注释来计算查询集的总投票数和正投票数。我注意到如果我对某个项目进行投票,那么具有相同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上打开了一个错误(我想下次我会先搜索)。我会为后人留下这个/也许有人可以找出解决方法。

1 个答案:

答案 0 :(得分:0)

我最终的解决方案是从投票对象中获取投票计数,然后将其附加到Model#对象,而不是使用Model#对象上的注释。这将需要做,直到描述中提到的票据被处理。