类没有对象成员

时间:2017-07-17 02:45:45

标签: python django django-views

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:类'问题has no objects成员`

我遵循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中运行了命令,但没有。

所以任何帮助都会很棒

18 个答案:

答案 0 :(得分:212)

使用pylint-django安装pip,如下所示

pip install pylint-django

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

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

答案 1 :(得分:36)

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

  

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

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

在第一个大括号内。 确保 pylint-django

希望这会有所帮助!

答案 2 :(得分:15)

继承人的答案。 来自我的reddit帖子...... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

  

这不是错误,只是来自VSC的警告。 Django补充说   动态属性到所有模型类(它使用了很多魔法   在引擎盖下),所以IDE通过查看它并不知道它   类声明,因此它会警告您可能出现的错误(它不是)。   对象实际上是一个帮助查询数据库的Manager实例。   如果你真的想摆脱那个警告你可以去你所有的   模型和添加对象= models.Manager()现在,VSC将会看到   声明的对象,不会再抱怨它。

答案 3 :(得分:7)

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

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

  

Python:选择Linter

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

答案 4 :(得分:5)

安装Django pylint:

pip install pylint-django

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

可用于python语言的settings.json如下所示:

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

    "[python]": {

    }
}

答案 5 :(得分:4)

我能够更新用户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 :(得分:4)

更新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"]

在VS代码的settings.json中。

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

  

每当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可以正常工作。

答案 7 :(得分:3)

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

Linter Path Edit

答案 8 :(得分:2)

我安装了 PyLint,但出现错误 Missing module docstringpylint(missing-module-docstring)。所以我在 pylint 的这个配置中找到了这个 answer :

"python.linting.pylintEnabled": true,
"python.linting.pylintArgs": [
    "--disable=C0111", // missing docstring
    "--load-plugins=pylint_django,pylint_celery",
 ],

现在可以使用了

答案 9 :(得分:2)

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

$ pip install pylint-django

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

$ pylint test_file.py --load-plugins pylint_django

-需要加载插件pylint_django才能正确查看django代码

答案 10 :(得分:1)

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

类似这样的内容:https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

错误:[pylint]类“ class_name”没有“ member_name”成员 可以通过以下方式在该行上将其抑制:

  # pylint: disable=no-member

答案 11 :(得分:1)

首先,使用<xsl:template name="xsl:initial-template"> <greetings> <xsl:for-each select="parse-json($input)?*"> <greeting msg="{?msg}" name="{?name}"/> </xsl:for-each> </greetings> </xsl:template> 安装pylint-django,如下所示:

pip

转到pip install pylint-django 查找并确保settings.jsonpython linting enabled 像这样:

enter image description here

在底部写true,如下所示:

enter image description here

OR

转到"python.linting.pylintPath": "pylint_django"并搜索Settings

确保选中python linting

Python > Linting: Pylint Enabled下写Python > Linting: Pylint Path

答案 12 :(得分:1)

通过执行Question = new Question()(我假设new是拼写错误),您将使用Question的内容覆盖问题模型。就像Sayse在评论中所说的那样:不要使用与变量相同的名称作为模型的名称。因此,将其更改为my_question = Question()

答案 13 :(得分:0)

将您的linter更改为- flake8 ,问题将消失。

答案 14 :(得分:0)

如果您使用python 3

python3 -m pip install pylint-django

如果python> 3

python -m pip install pylint-django

答案 15 :(得分: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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

只需在您的Questions表中添加对象= None。那为我解决了错误。