在多对多相关字段上执行聚合查询时遇到问题。
以下是我的模型:
class SortedTagManager(models.Manager):
use_for_related_fields = True
def get_query_set(self):
orig_query_set = super(SortedTagManager, self).get_query_set()
# FIXME `used` is wrongly counted
return orig_query_set.distinct().annotate(
used=models.Count('users')).order_by('-used')
class Tag(models.Model):
content = models.CharField(max_length=32, unique=True)
creator = models.ForeignKey(User, related_name='tags_i_created')
users = models.ManyToManyField(User, through='TaggedNote',
related_name='tags_i_used')
objects_sorted_by_used = SortedTagManager()
class TaggedNote(models.Model):
"""Association table of both (Tag , Note) and (Tag, User)"""
note = models.ForeignKey(Note) # Note is what's tagged in my app
tag = models.ForeignKey(Tag)
tagged_by = models.ForeignKey(User)
class Meta:
unique_together = (('note', 'tag'),)但是,只有在直接查询模型时,聚合字段used的值才是正确的:
for t in Tag.objects.all(): print t.used # this works correctly
for t in user.tags_i_used.all(): print t.used #prints n^2 when it should give n你能告诉我它出了什么问题吗?提前谢谢。
发布于 2010-04-14 20:13:03
我已经找出了问题所在,以及现在如何修复它:)
Django文档中所述的
Django将类中定义的第一个管理器解释为“默认”管理器,
的几个部分将专门为该模型使用该管理器。
在我的例子中,我应该确保SortedTagManager是第一个定义的Manager。
2.我应该计算notes而不是users
Count('notes', distinct=True)https://stackoverflow.com/questions/2635587
复制相似问题