类没有对象成员。

233
def index(request):
   latest_question_list = Question.objects.all().order_by('-pub_date')[:5]
   template = loader.get_template('polls/index.html')
   context = {'latest_question_list':latest_question_list}
   return HttpResponse(template.render(context, request))
该函数的第一行在Question.objects.all()上出现错误:

E1101:类“Question”没有“objects”成员

我正在按照Django文档教程进行操作,他们的代码可以正常运行。 我已经尝试过调用一个实例。
Question = new Question()
and using MyModel.objects.all()

同时我的models.py文件中这个类的代码是这样的...

Translated text:

Also my models.py code for that class is this...

class Question(models.Model):
    question_text = models.CharField(max_length = 200)
    pub_date = models.DateTimeField('date published') 

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

    def __str__(self):
        return self.question_text

徒劳无功,我仍然遇到这个错误。

我已经了解了pylint并运行了这个...

pylint --load-plugins pylint_django

尽管 GitHub README 文件中提到:

可以防止有关 Django 生成的属性(例如 Model.objects 或 Views.request)的警告。

我在虚拟环境中运行了该命令,但仍然没有任何效果。

因此,如果能提供任何帮助,那将是非常好的。


7
使用 pylint --generated-members=objects 命令。 - Raja Simon
抱歉,我在我的命令提示符中运行它,但没有任何变化。 - buuencrypted
你的Python和Django版本是什么? - Gavin Achtemeier
1
版本 Python 3.6.0 和 Django 1.11.3 - buuencrypted
3
对我来说解决这个问题的办法是在models.py文件中创建一个Manager实例。有关更多信息,请参阅django文档 - Ikraj mohammad
显示剩余8条评论
18个回答

435
使用以下命令使用pip安装pylint-django插件
pip install pylint-django

然后在Visual Studio Code中转到:用户设置Ctrl + ,或者如果可用,选择文件>首选项>设置)输入以下内容(请注意,VSC中需要使用花括号来设置自定义用户设置):
"pylint.args": ["load-plugins=pylint_django"],

1
用户设置在哪里? - cegprakash
48
太好了!我还想指出,您可以像这样将插件选项放在.pylintrc文件中:load-plugins=pylint_django这样它也会被CLI检测到,因此在持续集成设置中也可以使用。 - sibnerian
2
完成后,我得到了[pylint] C0111:Missing module docstring错误。 - Vishnu Sharma
1
更多细节请参考官方文档:https://code.visualstudio.com/docs/python/linting#_commandline-arguments-and-configuration-files - Anton Danilchenko
2
通过添加配置,@VishnuSharma可以禁用Pylint的默认值,因此您应该手动添加默认值。您可以按以下方式执行: {"python.linting.pylintArgs": [ "--load-plugins=pylint_django", "--disable=all", "--enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode" ]} 更多信息 - Oded .S
显示剩余9条评论

168

@tieuminh2510的回答非常完美。但是在新版本的VSC中,你将找不到在User Settings 中编辑或粘贴该命令的选项。

对于新版本,请按以下步骤添加代码:

  1. 按下 ctrl shift p 打开命令面板。
  2. 现在在命令面板中输入Preferences: Configure Language Specific Settings
  3. 选择Python
  4. 在第一个大括号内添加这些行:
    "python.linting.pylintArgs": [
            "--load-plugins=pylint_django",
        ]
请确保也安装了pylint-django

10
别忘了在 JSON 文件中加上逗号,否则它将不能正常工作。 - Georgi Stoyanov
5
还要记得执行pip install pylint-django。如果没有安装这个扩展,对设置进行的更改似乎会悄无声息地失败,导致所有的代码检查都出现问题。 - Dustin Michels
2
谢谢。您可以在官方的VS Code文档中找到相同的信息:https://code.visualstudio.com/docs/python/linting#_commandline-arguments-and-configuration-files - Anton Danilchenko
3
它解决了之前的错误,但现在出现了一个警告:“Missing module docstringpylint(missing-module-docstring)”。针对这个问题应该做什么? - Optider
还需要添加 "--django-settings-module=trydjango.settings"。 - pcsaunak

48

安装 Django 的 pylint:

pip install pylint-django

ctrl+shift+p > 首选项: 配置语言特定设置 > Python

Python 语言的 settings.json 应该如下所示:

{
    "python.linting.pylintArgs": [
        "--load-plugins=pylint_django"
    ],

    "[python]": {

    }
}

41
我尝试了所有可能的解决方案,但不幸的是我的 vscode 设置没有改变其 linter 路径。因此,我尝试在 设置 > 用户设置 > python 中探索 vscode 设置。找到 Linting: Pylint Path 并将其更改为 "pylint_django"。不要忘记在 设置 > 用户设置 > python 配置 中将 linter 从 "pyLint" 更改为 "pylint_django"。

Linter Path Edit


2
在我的 MacOS High Sierra 和 VSC 1.38 上运行良好,前提是我之前在虚拟环境中运行了 "pip install pylint-django"。 - Andrés Meza-Escallón

32
这是答案。从我的reddit帖子中得到... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/ 这不是一个错误,只是来自VSC的警告。 Django会在所有模型类上动态添加该属性(它在幕后使用了很多魔法),因此IDE通过查看类声明无法知道它,所以它会向您发出可能的错误警告(实际上不是错误)。对象实际上是一个Manager实例,可帮助查询数据库。 如果您真的想摆脱那个警告,您可以转到所有模型并添加objects = models.Manager(),现在,VSC将看到已声明objects,并且不会再次抱怨。

17
在我的 VS Code 中,模型类中的 objects = models.Manager() 对我很有帮助。谢谢。 - Mallory-Erik

23

VS CODE 1.40.0更新说明

执行以下操作后:

$ pip install pylint-django

请跟随此链接:https://code.visualstudio.com/docs/python/linting#_default-pylint-rules

请注意,将pylint-django纳入pylint考虑的方式是通过指定:

"python.linting.pylintArgs": ["--load-plugins", "pylint_django"]

在 VS Code 的 settings.json 中进行配置。

但是在那之后,你会注意到很多新的 linting 错误。然后,读一下这里所说的:

这些参数会在 python.linting.pylintUseMinimalCheckers 被设置为 true(默认值)时传递。如果你在 pylintArgs 中指定了一个值或使用了 Pylint 配置文件(参见下一节),那么pylintUseMinimalCheckers 会被隐式地设为 false

我所做的就是创建了一个像链接中描述的 .pylintrc 文件,然后,在文件内配置了以下参数(保留文件其他部分不变):

load-plugins=pylint_django

disable=all

enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode

现在pylint如预期般工作。


3
不需要创建一个单独的 .pylintrc 文件,可以通过在 settings.json 中执行以下操作来实现相同的效果:{ "python.linting.pylintArgs": [ "--load-plugins=pylint_django", "--disable=all", "--enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode" ] } 该代码将禁用所有 Pylint 规则,并启用指定的规则。同时还使用了 pylint_django 插件。 - sql_knievel

14

你可以更改 Visual Studio Code Python 扩展的代码检查工具。

在 VS 中打开命令面板(Ctrl+Shift+P),然后输入以下命令之一:

Python: Select Linter

当你选择一个代码检查工具时,它会被安装。我尝试了 Flake8,似乎问题已经得到解决。


2
虽然这个方法确实可行,但我发现作为一个代码检查工具,flake8真的很烦人。 - Richard Dunn

11

补充一下@Mallory-Erik所说的内容: 您可以在模型中放置objects = models.Manager()

class Question(models.Model):
    # ...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    # ...
    def __str__(self):
        return self.question_text
    question_text = models.CharField(max_length = 200)
    pub_date = models.DateTimeField('date published')
    objects = models.Manager()

2
这是我在Django 3和Python 3.8中唯一有效的解决方案。谢谢,伙计。 - Andrea

7

我成功更新了用户的settings.json文件。

在我的Mac电脑上,该文件存储在:

~/Library/Application Support/Code/User/settings.json

在其中,我设置了以下内容:

{
    "python.linting.pycodestyleEnabled": true,
    "python.linting.pylintEnabled": true,
    "python.linting.pylintPath": "pylint",
    "python.linting.pylintArgs": ["--load-plugins", "pylint_django"]
}

那对我解决了这个问题。


6
将您的代码检查工具更改为flake8,问题就会消失。

1
我发现这很有用,按下CMD + SHIFT + P并搜索Python: Select Linter,然后只需选择flake8! - Ayyoub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接