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 objects
member`でエラーになります。
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内でコマンドを実行しましたが、それでも何もしませんでした。
それで、どんな助けでも素晴らしいでしょう
次のようにpip
を使用してpylint-Django
をインストールします
pip install pylint-Django
その後、Visual Studioのコードに移動します。ユーザー設定(Ctrl + , または、[ファイル]> [設定]> [設定](利用可能な場合)を入力します(VSCのカスタムユーザー設定に必要な中括弧に注意してください)。
{"python.linting.pylintArgs": [
"--load-plugins=pylint_Django"
],}
@ tieuminh2510答えは完璧です。しかし、新しいバージョンのVSCでは、ユーザー設定でそのコマンドを編集または貼り付けるオプションは見つかりません。新しいバージョンではそのコードを追加するために次のステップに従ってください:
ctr + sft + Pを押して、コマンドパレットを開きます。今すぐコマンドパレットタイプ設定:言語固有の設定を構成します。今度はPythonを選択してください。こちらの右側にこのコードを貼り付けてください
"python.linting.pylintArgs": [
"--load-plugins=pylint_Django",
]
最初の中括弧の内側。 pylint-Djangoであることを確認してください。
これが役立つことを願っています!
答えがあります。私のreddit投稿から得た... https://www.reddit.com/r/Django/comments/6nq0bq/class_question_has_no_objects_member/
それはエラーではありません、それはVSCからの単なる警告です。 Djangoはそのプロパティをすべてのモデルクラスに動的に追加します(それは内部で多くの魔法を使います)、それでIDEはクラス宣言を見ることによってそれについて知らないので、それは可能性について警告しますエラーです(そうではありません)。オブジェクトは、実際にはDBへの問い合わせに役立つマネージャインスタンスです。本当にその警告を取り除きたいのであれば、すべてのモデルに移動してobjects = models.Manager()を追加することができます。これで、VSCはオブジェクトが宣言されたことを確認し、再度それについて不平を言うことはありません。
Visual Studio CodeのPython拡張機能用のリンターを変更できます。
VSでコマンドパレットCtrl + Shift + Pを開き、次のいずれかのコマンドを入力します。
Python:セレクトリンター
リンターを選択するとそれがインストールされます。私はflake8を試してみました、それは問題が私のために解決したようです。
以下のコマンドを使用して、最初にpylint-Djangoをインストールします。
$ pip install pylint-Django
その後、次のように2番目のコマンドを実行します。
$ pylint test_file.py --load-plugins pylint_Django
- load-plugins pylint_DjangoはDjangoのコードを正しくレビューするために必要です
各エラーに固有の各行のエラーを抑制する方法はどうですか。
このようなもの: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html
エラー:[pylint]クラス 'class_name'には 'member_name'メンバーがありませんそれはその行で抑制することができます:
# pylint: disable=no-member
Question = new Question()
(私はnew
はタイプミスだと思います)をすることによってあなたはQuestion
のintanceでQuestionモデルを上書きしています。 Sayseがコメントで言ったように:あなたの変数にモデルの名前と同じ名前を使わないでください。それでそれをmy_question = Question()
のようなものに変更してください。
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/ )
リンターを - flake8に変更すると問題は解決します。
@ 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()