【问题标题】:Annotation incorrect with GenericRelationGenericRelation 的注释不正确
【发布时间】: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


    【解决方案1】:

    我的最终解决方案是从 Vote 对象中获取投票计数,然后将其附加到 Model# 对象,而不是在 Model# 对象上使用注释。这必须在描述中提到的票被处理之前完成。

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 2017-07-30
      • 2015-08-05
      • 2011-04-10
      相关资源
      最近更新 更多