我有多态标记模型,我想为它创建tag_cloud, 但是当我想将相关对象计算到标签时
tags = TaggedItem.objects.all()
# Calculate tag, min and max counts.
min_count = max_count = tags[0].object.objects.count()
我得到:
Manager isn't accessible via Artcle instances
tagging.models.py
class Tag(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(unique=True, max_length=100)
#.....
class TaggedItem(models.Model):
tag = models.ForeignKey(Tag)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
#.....
答案 0 :(得分:5)
您正在尝试从模型实例访问管理器,这是不可能的。更多信息:Retrieving objects(特别是注释)。
tags[0].object.objects.count() \/
¨¨¨¨¨¨ /\
而你可以这样做(未经测试):
object_klass = tags[0].object.__class__
min_count = max_count = object_klass.objects.filter(pk=tags[0].object.pk).count()
答案 1 :(得分:4)
将标记方法添加到TaggedItem会不会更容易/更清晰。可能是下面的东西。我有点生疏,这段代码可能不起作用。
class TaggedItem(models.Model):
tag = models.ForeignKey(Tag)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
def get_object_count():
return self.object__count #or return self.object.count()
答案 2 :(得分:4)
首先发出了错误,因为如果我想在这种情况下访问tags
和计算,我宁愿改变
tags = TaggedItem.objects.all()
# Calculate tag's min and max counts.
min_count = max_count = tags[0].object.objects.count()
为:
tags = Tag.objects.all()
# Calculate tag, min and max counts.
min_count = max_count = tags[0].taggeditem_set.count()