类没有对象成员


154
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:类“问题”没有对象“成员”

我正在阅读Django文档教程,并且它们具有相同的代码并正在运行。

我尝试调用实例。

Question = new Question()
and using MyModel.objects.all()

我的models.py课程代码也是这个...

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自述文件说...

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

我在我的virtualenv中运行了命令,但是什么也没有。

因此,任何帮助都会很棒。


7
使用pylint --generated-members=objects
Raja Simon

抱歉,在我的cmd中运行它并没有改变任何事情。
buuencrypt's

您的python和django版本是什么?
加文·阿赫特迈耶

1
verson python 3.6.0和django 1.11.3
buuencrypted

2
对我来说,解决问题的方法是Managermodels.py文件中创建一个实例。有关更多信息,请参考django文档
伊克拉伊·穆罕默德(Ikraj Mohammad),

Answers:


335

pylint-django使用pip如下安装

pip install pylint-django

然后在Visual Studio Code中转到:用户设置Ctrl+ ,或文件>首选项>设置(如果可用))放入以下内容(请注意VSC中自定义用户设置所需的花括号):

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

用户设置在哪里
cegprakash

转到“文件”->“首选项”->“设置”或使用“ Ctrl +逗号”
Sukma Saputra,

29
优秀的!我还要指出,您可以将plugin选项放在这样的.pylintrc文件中: load-plugins=pylint_django 这样,CLI也会选择它,因此它将在连续集成设置中工作。
西伯利亚人'18

这样做之后我得到了[pylint] C0111:Missing module docstring错误
Vishnu Sharma,

1
在官方文档的更多细节:code.visualstudio.com/docs/python/...
安东Danilchenko

98

@ tieuminh2510的答案是完美的。但是在较新版本的VSC中,您将找不到在用户设置中编辑或粘贴该命令的选项。现在以较新的版本添加该代码,请按照以下步骤操作

ctr + sft + P打开“ 命令面板”。现在,在命令面板中键入首选项:配置特定语言的设置。现在选择Python。在右侧粘贴此代码

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

里面第一个大括号。确保pylint-django

希望这会有所帮助!


6
不要忘记在json文件中添加逗号,否则它将无法正常工作。
Georgi Stoyanov

4
也别忘了pip install pylint-django。如果未安装该扩展程序,则对设置的更改似乎会悄然失败,破坏所有的皮棉。
达斯汀·米歇尔斯

1
谢谢。:你可以在这里找到的官方VS代码文档中的相同信息code.visualstudio.com/docs/python/...
安东Danilchenko

它解决了先前的错误。但是,现在有警告了。Missing module docstringpylint(missing-module-docstring)。为此可以做什么?
Optider

34

安装Django pylint:

pip install pylint-django

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

适用于python语言的settings.json应该如下所示:

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

    "[python]": {

    }
}

26

这是答案。从我的reddit帖子中获得... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

这不是错误,只是来自VSC的警告。Django会动态地将该属性添加到所有模型类中(它在幕后使用了很多魔法),因此IDE不会通过查看类声明来了解该属性,因此会警告您可能存在的错误(不是)。对象实际上是一个帮助查询数据库的Manager实例。如果您真的想摆脱该警告,则可以转到所有模型并添加object = models.Manager()现在,VSC将看到声明的对象,并且不会再次抱怨。


13
objects = models.Manager()在Models类中,我在VS Code中做到了。谢谢。
马洛里·埃里克

21

我已经尝试了所有可能的解决方案,但不幸的是,我的vscode设置不会更改其linter路径。因此,我尝试在设置>用户设置> python中探索vscode设置。找到Linting:Pylint路径并将其更改为“ pylint_django”。别忘了在设置>用户设置> python配置中将linter更改为“ pylint_django”,从“ pyLint”更改为“ pylint_django”。

林特路径编辑


1
在MacOS High Sierra和VSC 1.38上为我工作,前提是以前我在虚拟环境中运行过“ pip install pylint-django”。
安德烈·梅萨-Escallón

12

VS CODE 1.40.0的更新

完成后:

$ pip install pylint-django

请点击以下链接:https : //code.visualstudio.com/docs/python/linting#_default-pylint-rules

请注意,要pylint考虑的方法pylint-django是通过指定:

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

settings.jsonVS Code中。

但是之后,您会发现很多新的掉毛错误。然后,阅读此处的内容:

只要将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可以正常工作了。


您可以通过在settings.json中执行此操作来获得相同的效果,而不是创建单独的.pylintrc文件:{“ python.linting.pylintArgs”:[“ --load-plugins = pylint_django”,“ --disable = all “,” --enable = F,E,不可访问,重复键,不必要的分号,全局变量未分配,未使用变量,二进制运算符例外,格式错误的字符串,反斜杠-string,bad-open-mode“]}
sql_knievel

11

您可以将linter for Python扩展更改为Visual Studio Code。

在VS中,打开命令面板Ctrl + Shift + P并键入以下命令之一:

Python:选择Linter

当您选择短绒时,它将被安装。我尝试了flake8,看来问题已解决。


1
虽然这样做确实有效,但我发现flake8作为短绒棉纸确实很烦人。
理查德·邓恩'18

4

只需添加@ 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()

3

首先使用以下命令安装pylint-django

$ pip install pylint-django

然后运行第二条命令,如下所示:

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django是正确检查django代码所必需的



1

通过执行操作Question = new Question()(我假设new是错字),您将用的实例覆盖Question模型Question。就像Sayse在评论中所说:不要为变量使用与模型名称相同的名称。因此,将其更改为类似my_question = Question()


它与我的django和pytho的pc配置有关,我在Macbook上重新编码了,效果很好。我也在我的代码中尝试了我们的建议,但没有任何区别。
buuencrypt '17

1

如何抑制特定于每个错误的每一行上的错误?

像这样的东西:https : //pylint.readthedocs.io/en/latest/user_guide/message-control.html

错误:[pylint]类'class_name'没有'member_name'成员可以通过以下方法在该行上取消显示:

  # pylint: disable=no-member

2
尽管此解决方案是蛮力的,但这是保持理智的唯一途径。我在许多不同的模块上遇到了这些错误,每次看到新模块时都不会更改设置。
Przemek D


0

当我使用pylint_runner时发生此问题

所以我要做的是打开.pylintrc文件并将其添加

# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=objects

0

我能够更新用户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"]
}

那为我解决了这个问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.