【问题标题】:Manager isn't accessible via `Model` instances无法通过“模型”实例访问管理器
【发布时间】:2011-07-29 19:30:12
【问题描述】:

我有多态标记模型,我想为它创建 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')
    #.....

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    您正在尝试从模型实例访问管理器,这是不可能的。更多信息:Retrieving objects(特别是 Note)。

     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()
    

    【讨论】:

      【解决方案2】:

      向 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()
      

      【讨论】:

        【解决方案3】:

        首先发出了错误,因为如果我想在这种情况下访问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()
        

        【讨论】:

          猜你喜欢
          • 2011-04-21
          • 1970-01-01
          • 2021-10-08
          • 1970-01-01
          • 1970-01-01
          • 2011-09-24
          • 2012-12-04
          • 2022-06-16
          • 1970-01-01
          相关资源
          最近更新 更多