web-dev-qa-db-ja.com

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

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:クラス 'Questionhas no objectsmember`でエラーになります。

Djangoのドキュメントチュートリアルに従って、Imと同じコードを起動して実行しています。

インスタンスを呼び出そうとしました。

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のreadmeファイルに書いてあっても...

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

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

それで、どんな助けでも素晴らしいでしょう

78
buuencrypted

次のようにpipを使用してpylint-Djangoをインストールします

pip install pylint-Django

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

{"python.linting.pylintArgs": [
     "--load-plugins=pylint_Django"
],}
217
tieuminh2510

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

ctr + sft + Pを押して、コマンドパレットを開きます。今すぐコマンドパレットタイプ設定:言語固有の設定を構成します。今度はPythonを選択してください。こちらの右側にこのコードを貼り付けてください

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

最初の中括弧の内側。 pylint-Djangoであることを確認してください。

これが役立つことを願っています!

38
FightWithCode

答えがあります。私のreddit投稿から得た... https://www.reddit.com/r/Django/comments/6nq0bq/class_question_has_no_objects_member/

それはエラーではありません、それはVSCからの単なる警告です。 Djangoはそのプロパティをすべてのモデルクラスに動的に追加します(それは内部で多くの魔法を使います)、それでIDEはクラス宣言を見ることによってそれについて知らないので、それは可能性について警告しますエラーです(そうではありません)。オブジェクトは、実際にはDBへの問い合わせに役立つマネージャインスタンスです。本当にその警告を取り除きたいのであれば、すべてのモデルに移動してobjects = models.Manager()を追加することができます。これで、VSCはオブジェクトが宣言されたことを確認し、再度それについて不平を言うことはありません。

15
buuencrypted

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

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

Python:セレクトリンター

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

7
moth

私はすべての可能な解決策を試してみましたが、残念ながら私のvscode設定がリンターパスを変更することはありません。だから、私は設定>ユーザー設定> python でvscode設定を調べることにします。 Linting:Pylint Path を見つけて、それを "pylint_Django"に変更します。 設定>ユーザー設定> python設定で "lyl"を "pylint_Django"に変更することを忘れないでください。

Linter Path Edit

以下のコマンドを使用して、最初にpylint-Djangoをインストールします。

$ pip install pylint-Django

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

$ pylint test_file.py --load-plugins pylint_Django

- load-plugins pylint_DjangoはDjangoのコードを正しくレビューするために必要です

2
Chirag Kalal

各エラーに固有の各行のエラーを抑制する方法はどうですか。

このようなもの: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

エラー:[pylint]クラス 'class_name'には 'member_name'メンバーがありませんそれはその行で抑制することができます:

  # pylint: disable=no-member
1
Pritam Manerao

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

1
voodoo-burger

python 3を使用する場合

python3 -m pip install pylint-Django

python <3の場合

python -m pip install pylint-Django==0.11.1

注:バージョン2.0では、pylint> = 2.0が必要です。これはPython 2をもうサポートしていません! ( https://pypi.org/project/pylint-Django/

0
Ashen One

リンターを - flake8に変更すると問題は解決します。

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()
0
LeRoy