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

我在使用 django 及其自定义管理器时遇到了错误。我有这个自定义管理器:

class CallManager(models.Manager):
    def get_queryset(self):
        return super(CallManager, self).get_queryset().filter(is_active=True)

class Call(models.Model):
    ...

    # Data            
    is_active = models.BooleanField(default=True)

    # Managers
    objects = models.Manager() # Default
    active = CallManager() # Active calls

好的,所以现在我正在尝试从 views.py (call/views.py) 中检索数据

# Call list
def call_list(request):
    list = Call.objects.all() # Error here
    render(request, 'call/call_list.html', {'list': list})

执行 Call.objects.all() 时,django 会显示此消息:

Manager isn't accessible via Call instances

我不知道这里发生了什么。

提前致谢

编辑:模型

# Relations
#country = models.ManyToManyField...
individual = models.ManyToManyField...
project = models.ForeignKey(Project, on_delete=models.CASCADE)
criteria = models.ManyToManyField...
# Data
call_name = models.CharField(max_length=20, default=None)
start_date = models.DateField(default=None)
end_date = models.DateField(default=None, null=True, blank=True)
is_active = models.BooleanField(default=True)
# Creation
created_at = models.DateTimeField(auto_now_add=True, null=True)
modified_at = models.DateTimeField(auto_now=True, blank=True)
# Managers
objects = models.Manager() # Default
active = CallManager() # Active calls

追溯:

TypeError: 'Call' object is not subscriptable

在处理上述异常的过程中,又发生了一个异常:

Traceback (most recent call last):
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "path...virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "path.../call/views.py", line 27, in call_list
    return render(request, 'call/call_list.html', {'list': list})
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/shortcuts.py", line 36, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 175, in render
    return self._render(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/test/utils.py", line 98, in instrumented_test_render
    return self.nodelist.render(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 943, in render
    bit = node.render_annotated(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 910, in render_annotated
    return self.render(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/loader_tags.py", line 155, in render
    return compiled_parent._render(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/test/utils.py", line 98, in instrumented_test_render
    return self.nodelist.render(context)
  File "path...virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 943, in render
    bit = node.render_annotated(context)
  File "/Users/Jotadrive/.virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 910, in render_annotated
    return self.render(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/loader_tags.py", line 67, in render
    result = block.nodelist.render(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 943, in render
    bit = node.render_annotated(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 910, in render_annotated
    return self.render(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/defaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 910, in render_annotated
    return self.render(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 993, in render
    output = self.filter_expression.resolve(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 676, in resolve
    obj = self.var.resolve(context)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 802, in resolve
    value = self._resolve_lookup(context)
  File "path...virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/template/base.py", line 843, in _resolve_lookup
    current = getattr(current, bit)
  File "path....virtualenvs/apolo_venviorment/lib/python3.6/site-packages/django/db/models/manager.py", line 178, in __get__
    raise AttributeError("Manager isn't accessible via %s instances" % cls.__name__)
AttributeError: Manager isn't accessible via Call instances
[19/Jul/2018 18:13:12] "GET /call/list/ HTTP/1.1" 500 200797

【问题讨论】:

  • 看起来你用单个实例覆盖了Call 名称。可以添加完整的view.py 代码吗?
  • views.py 中没有更多内容,我只有导入:from .models import Call
  • 嗯.. 你的模型呢? Call课后有代码吗?
  • 显示完整的回溯。
  • 仍然无法弄清楚这里发生了什么......我迷路了

标签: django django-models django-templates django-views django-managers


【解决方案1】:

解决方案: 看来这是我模型中的一个字段与经理之间的冲突。 该字段被命名为“活动”。 然后我改变了这个:

objects = models.Manager()
active = CallManager()

为此:

objects = models.Manager() # Default manager
objects_active = CallManager() # Custom manager

希望能帮助别人

【讨论】:

    【解决方案2】:

    我做的是这个(我用 django shell 做的,所以你可以看到它的工作原理): 首先我打开了 Django shell

    py manage.py shell
    

    然后你需要从应用中调用你的模型。

    >>> from <app_name>.models import <model_name>
    >>> querydata = <model_name>.objects.all()
    >>> querydata
    <QuerySet [<<mode_name>: randomdata>, <<mode_name>: randomdata2>]>
    

    希望我是清楚的。

    【讨论】:

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