【问题标题】:Class has no 'objects' member in django类在 Django 中没有“对象”成员
【发布时间】:2018-08-13 18:41:23
【问题描述】:
from django.http import HttpResponse
from .models import Destination
def index(request):
    boards = Destination.objects.all()
    boards_names = list()
    for Destination in boards:
     boards_names.append(Destination.destinationtext)
     response_html = '<br>'.join(boards_names)
     return HttpResponse(response_html)

我编写此代码只是为了练习 django 框架,但我通过 pylint 收到以下错误:

E1101:Class 'Destination' has no 'objects' member
E0601:Using variable 'Destination' before assignment

【问题讨论】:

  • 你写了for Destination in ...,所以你覆盖了对类的引用。

标签: python django django-views


【解决方案1】:

你有两个不同的问题,而不仅仅是你说的一个:

E1101:Class 'Destination' has no 'objects' member:是一个警告 这是因为pylint 不知道我们的特殊 Django 变量。像 pylint-django 这样的 pylint 插件可能会成功。

E0601:Using variable 'Destination' before assignment:在代码的 for 循环中,您定义了一个名为 Destination 的变量。这不仅是不好的做法,因为 python 变量需要在 lowercase_underscore 中,而且 它会覆盖 Destination,这就是导致此错误的原因。你可能想做这样的事情:

for d in boards:
# Or:
for destination in boards:

【讨论】:

  • 这与 Pylint 无关:这是一个真正的错误,因为由于 for 循环,它会将 Destination 视为 local 变量。
  • @WillemVanOnsem 错误是Destination has no variable objects,指的是Destination.objects.all()这一行,前两行创建了同名的局部变量。
  • 不,这是一个Pylint hint,但是如果你运行它不会出错。
【解决方案2】:

你在你的观点中写道:

for Destination in boards:
    # ...

这意味着 Python 将 Destination 视为一个本地变量,一个在分配之前使用的本地变量。

你可以在循环中重命名变量来解决问题,但实际上你可以在这里使用.values_list(..)使它更优雅更快:

from django.http import HttpResponse
from .models import Destination

def index(request):
    response_html = '<br>'.join(
        Destination.objects.values_list('destinationtext', flat=True)
    )
    return HttpResponse(response_html)

尽管如此,我仍然不相信这能解决问题,因为destinationtext 可能包含 HTML,然后会在响应中混淆。通常最好使用模板。

【讨论】:

  • 在 OP 声明该变量之前 2 行发生错误。这是一个问题,但不是问题。
  • @NonameSL:这当然是问题所在。你认为“在赋值前使用变量'Destination'”是什么意思?
  • 看来我们俩都是对的,因为 OP 有两个错误:E1101:Class 'Destination' has no 'objects' memberE0601:Using variable 'Destination' before assignment
  • @NonameSL:但这是两个 PyLint 警告。 Pylint 抱怨了很多不会引发错误的东西,它只是想提高代码质量。
  • 是的,但问题的标题是Class has no 'objects' member in django,这是OP认为他得到的错误。你是对的,但我只是参考了 OP 认为他们得到的错误,而第二个错误正如你所说的不仅仅是一个警告,而是一个错误。
猜你喜欢
  • 1970-01-01
  • 2017-12-21
  • 2020-02-03
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
相关资源
最近更新 更多