クラスにオブジェクトメンバーがありません


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:クラス 'Question'にはオブジェクト 'member'がありません

私は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 --load-plugins pylint_django

githubのreadmeファイルでさえ、それは助けにはなりませんでした...

Model.objectsやViews.requestなどのDjango生成属性に関する警告を防止します。

私はvirtualenv内でコマンドを実行しましたが、何も実行しませんでした。

だからどんな助けも素晴らしいでしょう。


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

申し訳ありませんが、それを私のcmdで実行しましたが、変更はありませんでした。
buuencrypted 2017

あなたのpythonとdjangoのバージョンは何ですか?
Gavin Achtemeier 2017

1
verson python 3.6.0およびdjango 1.11.3
buuencrypted

2
私にとって問題を解決したのManagerは、models.pyファイル内にインスタンスを作成することでした。詳細については、djangoのドキュメントを参照してください。
Ikraj mohammad

回答:


335

次のようにインストールpylint-djangopipます

pip install pylint-django

次に、Visual Studioのコードに移動します:ユーザー設定Ctrl+ ,または[ファイル]> [設定]> [ 設定](使用可能な場合))以下を入力します(VSCのカスタムユーザー設定に必要な中括弧に注意してください)。

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

ユーザー設定はどこ
ですか

「ファイル」
Sukma Saputra 2018年

29
優れた!また、プラグインオプションを次の.pylintrcようにファイルに配置できることも指摘しておきます。これ load-plugins=pylint_django により、CLI でもプラグインオプションが選択されるため、継続的インテグレーション設定で機能します。
シブネリアン2018

そうした後、[pylint] C0111:Missing module docstringエラーが発生します
Vishnu Sharma 2018

1
公式ドキュメントで詳細:code.visualstudio.com/docs/python/...
アントンDanilchenko

98

@ tieuminh2510答えは完璧です。しかし、VSCの新しいバージョンでは、ユーザー設定でそのコマンドを編集または貼り付けるオプションが見つかりません。新しいバージョンでは、次の手順に従ってコード追加します

押しCTR +は+ PをSFT開くために、コマンドパレットを。次に、コマンドパレットで[基本設定:言語固有の設定を構成]と入力します。次に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はクラス宣言を調べてもそのことを認識しないため、エラーの可能性について警告します(そうではありません)。オブジェクトは実際には、DBのクエリに役立つManagerインスタンスです。本当にその警告を取り除きたい場合は、すべてのモデルに移動して、objects = models.Manager()を追加できます。これで、VSCは宣言されたオブジェクトを表示し、それについて再び文句を言うことはなくなります。


13
objects = models.Manager()モデルクラスではVS Codeで私のためにそれをしました。ありがとう。
Mallory-Erik

21

私は提供されたすべての可能なソリューションを試しましたが、残念ながら私のvscode設定はそのリンターパスを変更しません。そこで、設定>ユーザー設定> pythonで vscodeの設定を調べます。Linting:Pylint Pathを見つけて、「pylint_django」に変更します。設定>ユーザー設定> python設定でリンターを "pylint_django"に変更することを忘れないでください"pyLint"から "pylint_django"に。

リンターパス編集


1
MacOS High SierraとVSC 1.38で動作しましたが、以前は仮想環境で「pip install pylint-django」を実行していました。
アンドレス・メザ-Escallón

12

VSコード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コードの。

しかし、その後、あなたは多くの新しいリンティングエラーに気づくでしょう。次に、それがここで言ったことを読んでください:

これらの引数は、python.linting.pylintUseMinimalCheckerstrue(デフォルト)に設定されるたびに渡されます。pylintArgsPylint構成ファイルで値を指定するか使用する場合(次のセクションを参照)、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、unreachable、duplicate-key、unnecessary-semicolon、global-variable-not-assigned、unused-variable、binary-op-exception、bad-format-string、anomalous-backslash-in -string、bad-open-mode "]}
sql_knievel

11

Visual Studio CodeのPython拡張機能のリンターを変更できます。

VSでコマンドパレットCtrl + Shift + Pを開き、次のいずれかのコマンドを入力します。

Python:リンターを選択

リンターを選択すると、インストールされます。私はflake8を試しましたが、問題は解決したようです。


1
これは機能しましたが、リンカとしてflake8は本当に迷惑であることがわかりました。
Richard Dunn

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

次に、2番目のコマンドを次のように実行します。

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_djangoは、djangoのコードを正しく確認するために必要です



1

これによりQuestion = new Question()(私は仮定しnew、あなたがのintanceで質問モデルを上書きしているタイプミスです)Question。Sayseがコメントで言ったように:モデルの名前と同じ名前を変数に使用しないでください。ので、に変更してくださいmy_question = Question()


私のdjangoとpythoのPC構成とは何か、私はそれを私のMacbookに再コード化しましたが、うまく動作します。また、コードで提案を試みましたが、違いはありませんでした。
buuencrypted

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

ユーザー設定を更新できました。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"]
}

これで問題は解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.