【问题标题】:Class has no objects member类没有对象成员
【发布时间】:2017-12-21 11:04:09
【问题描述】:
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 中运行了这个命令,但什么也没有。

所以任何帮助都会很棒。

【问题讨论】:

  • 使用pylint --generated-members=objects
  • 抱歉,在我的 cmd 中运行它并没有改变任何东西。
  • 你的python和django版本是多少?
  • 版本 python 3.6.0 和 django 1.11.3
  • 对我来说,解决问题的方法是在 models.py 文件中创建一个 Manager 实例。请参阅django documentation 了解更多信息。

标签: python django django-views


【解决方案1】:

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

pip install pylint-django

然后在 Visual Studio Code 中转到:User SettingsCtrl + , 或 File > Preferences > Settings if available )输入以下内容(请注意 VSC 中自定义用户设置所需的花括号):

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

【讨论】:

  • 用户设置在哪里
  • 太棒了!我还要指出,您可以将插件选项放在 .pylintrc 文件中,如下所示:load-plugins=pylint_django 这样它也将被 CLI 拾取,因此它可以在持续集成设置中工作。
  • 这样做后我收到[pylint] C0111:Missing module docstring 错误
  • 更多详情见官方文档:code.visualstudio.com/docs/python/…
  • @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" ]}for more info
【解决方案2】:

@tieuminh2510's answer 是完美的。但在较新版本的 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 也已安装。

【讨论】:

  • 在json文件中不要忘记加逗号,否则无法正常工作。
  • 别忘了pip install pylint-django。如果未安装扩展程序,对您的设置所做的更改似乎会悄悄地失败,从而破坏所有 linting。
  • 谢谢。您可以在此处的官方 VS Code 文档中找到相同的信息:code.visualstudio.com/docs/python/…
  • 它解决了之前的错误。但是,现在警告来了。 Missing module docstringpylint(missing-module-docstring)。可以为此做些什么?
  • 这也得加“--django-settings-module=trydjango.settings”
【解决方案3】:

安装 Django pylint:

pip install pylint-django

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

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

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

    "[python]": {

    }
}

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 在 MacOS High Sierra 和 VSC 1.38 上为我工作,前提是我之前在我的虚拟环境中运行了“pip install pylint-django”。
    【解决方案5】:

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

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

    【讨论】:

    • objects = models.Manager() 在模型类中为我在 VS Code 中完成了它。谢谢。
    【解决方案6】:

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

    【讨论】:

    • 无需创建单独的 .pylintrc 文件,您可以通过在 settings.json 中执行此操作来获得相同的效果:{ "python.linting.pylintArgs": [ "--load-plugins=pylint_django ", "--disable=all", "--enable=F,E,无法访问,重复键,不必要的分号,全局变量未分配,未使用变量,二进制操作异常,错误格式-string,字符串中的异常反斜杠,错误的打开模式"] }
    【解决方案7】:

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

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

    Python:选择 Linter

    当您选择一个 linter 时,它将被安装。我尝试了 flake8,似乎问题已经解决了。

    【讨论】:

    • 虽然这确实有效,但我发现 flake8 作为 linter 真的很烦人。
    【解决方案8】:

    只是补充@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()
    

    【讨论】:

    • 这是唯一适用于 Django 3 和 Python 3.8 的解决方案。谢谢老兄。
    【解决方案9】:

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

    【讨论】:

    • 我发现这很有用,点击 CMD + SHIFT + P 并搜索 Python: Select Linter and just select flake8!
    【解决方案10】:

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

    这解决了我的问题。

    【讨论】:

      【解决方案11】:

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

      $ pip install pylint-django
      

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

      $ pylint test_file.py --load-plugins pylint_django
      

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

      【讨论】:

        【解决方案12】:

        如果你使用 python 3

        python3 -m pip install pylint-django
        

        如果python

        python -m pip install pylint-django==0.11.1
        

        注意:版本 2.0,需要 pylint >= 2.0,它不再支持 Python 2! (https://pypi.org/project/pylint-django/)

        【讨论】:

          【解决方案13】:

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

          pip install pylint-django
          

          转到settings.json 查找并确保python linting enabledtrue 像这样:

          在底部写"python.linting.pylintPath": "pylint_django"这样的:

          或,

          转到Settings 并搜索python linting

          确保选中Python > Linting: Pylint Enabled

          Python > Linting: Pylint Path下面写pylint_django

          【讨论】:

          • 谢谢先生,这让我发疯了,因为我正在尝试所有其他答案所暗示的一切,但在我找到你的答案并读到我需要添加 pylint 之前没有任何效果settings.json 的 django 路径 "python.linting.pylintPath": "pylint_django",
          【解决方案14】:

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

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

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

            # pylint: disable=no-member
          

          【讨论】:

          • 尽管这个解决方案是蛮力的,但它是保持理智的唯一方法。我在几十个不同的模块上遇到了这些错误,我不会每次看到新模块时都更改设置。
          【解决方案15】:

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

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

          现在它可以工作了

          【讨论】:

          • 你确定这回答了被问到的问题吗?
          • 我尝试安装 pylint 作为第一个答案pip install pylint-django,但之后我得到了Missing module docstringpylint(missing-module-docstring)。所以,我搜索并找到了这个link,它的 pylint 配置对我有用。所以,我认为这补充了这个问题的答案。如果我做错了,请原谅,但我是这里的新手。
          • 我改进了我的答案。如果不是更好,请指出。
          【解决方案16】:

          通过执行Question = new Question()(我假设new 是一个错字),您将使用Question 的实例覆盖问题模型。就像 Sayse 在 cmets 中所说:不要为变量使用与模型名称相同的名称。所以把它改成my_question = Question()

          【讨论】:

          • 它与我的 django 和 pytho 的 PC 配置有关,我在我的 macbook 上重新编码,它工作得很好。我也在我的代码中尝试了你的建议,它没有任何区别。
          【解决方案17】:

          这个问题发生在我使用 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
          

          【讨论】:

            【解决方案18】:

            只需在您的问题表中添加对象 = 无。这为我解决了错误。

            【讨论】:

              猜你喜欢
              • 2020-02-03
              • 1970-01-01
              • 2021-06-10
              • 1970-01-01
              • 1970-01-01
              • 2020-10-14
              • 2023-04-02
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多