web-dev-qa-db-de.com

Klasse hat kein Objektmitglied

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))

Die erste Zeile dieser Funktion erhält einen Fehler in Question.objects.all () --> E1101: Klasse "Questionhas no objectsmember"

Ich folge dem Django-Dokumentations-Tutorial und sie haben den gleichen Code.

Ich habe versucht, eine Instanz aufzurufen. 

Question = new Question()
and using MyModel.objects.all()

Auch mein models.py-Code für diese Klasse ist dies ...

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

Ohne Erfolg habe ich immer noch diesen Fehler.

Ich habe über Pylint gelesen und bin dies gelaufen ...

pylint --load-plugins pylint_Django

Was nicht geholfen hat, auch wenn die Readme-Datei von github sagt ...

Verhindert Warnungen über von Django generierte Attribute wie Model.objects oder Views.request.

Ich habe den Befehl in meiner Virtualenv ausgeführt und noch nichts.

Jede Hilfe wäre also toll

63
buuencrypted

Installieren Sie pylint-Django mit pip wie folgt

pip install pylint-Django

Dann in Visual Studio Code gehen Sie zu: Benutzereinstellungen (Ctrl + , oder Datei> Einstellungen> Einstellungen (falls verfügbar) Geben Sie Folgendes ein (beachten Sie die geschweiften Klammern, die für benutzerdefinierte Benutzereinstellungen in VSC erforderlich sind):

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

@ tieuminh2510 Antwort ist perfekt. In neueren Versionen von VSC finden Sie jedoch nicht die Option zum Bearbeiten oder Einfügen dieses Befehls in Benutzereinstellungen . In neueren Versionen von fügen Sie diesen Code hinzu, indem Sie die folgenden Schritte ausführen:

Drücken Sie ctr + sft + P, um die Befehls-Palette zu öffnen. Geben Sie jetzt in der Befehlspalette den Befehl Preferences: Sprachspezifische Einstellungen ..__ ein. Wählen Sie nun Python. Fügen Sie hier in der rechten Seite diesen Code ein

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

In den ersten geschweiften Klammern .. _. Stellen Sie sicher, dass pylint-Django.

Hoffe das wird helfen! 

20
FightWithCode

Hier ist die Antwort. Wurde von meinem reddit-Post erhalten ... https://www.reddit.com/r/Django/comments/6nq0bq/class_question_has_no_objects_member/

Das ist kein Fehler, es ist nur eine Warnung von VSC. Django fügt diese Eigenschaft dynamisch allen Modellklassen hinzu (es verbraucht viel Magie unter der Haube), daher weiß die IDE nicht, wie es aussieht) Bei der Klassendeklaration warnt objects Sie vor einem möglichen Fehler (ist es nicht). Objects ist in Wirklichkeit eine Manager-Instanz, die bei der Abfrage der Datenbank hilft. Wenn Sie diese Warnung wirklich loswerden möchten, können Sie zu allen Ihren Modellen gehen und add objects = models.Manager () Jetzt sieht VSC die deklarierten Objekte und beschwert sich nicht mehr darüber.

17
buuencrypted

Sie können den Linter für die Python-Erweiterung für Visual Studio-Code ändern.

Öffnen Sie in VS die Befehlspalette Strg + Umschalttaste + P und geben Sie einen der folgenden Befehle ein:

Python: Wählen Sie Linter

wenn Sie einen Linter auswählen, wird er installiert. Ich habe Flake8 ausprobiert und scheint das Problem für mich gelöst zu haben.

6
moth

Installieren Sie zuerst pylint-Django mit folgendem Befehl

$ pip install pylint-Django

Führen Sie dann den zweiten Befehl wie folgt aus:

$ pylint test_file.py --load-plugins pylint_Django

--load-plugins pylint_Django ist notwendig, um einen Code von Django richtig zu überprüfen

1
Chirag Kalal

Wenn Sie Question = new Question() ausführen (ich gehe davon aus, dass new ein Tippfehler ist), überschreiben Sie das Fragemodell mit einer Intance von Question. Wie Sayse in den Kommentaren sagte: Verwenden Sie nicht denselben Namen für Ihre Variable wie der Name des Modells. Ändern Sie es also in etwas wie my_question = Question().

1
voodoo-burger

Ich habe alle möglichen Lösungen ausprobiert, aber meine vscode-Einstellungen haben ihren Linterpfad nicht geändert. Ich möchte also die Vcode-Einstellungen in Einstellungen> Benutzereinstellungen> Python erkunden. Suchen Sie Linting: Pylint Path und ändern Sie ihn in "pylint_Django". Vergessen Sie nicht, den Linter in "pylint_Django" unter settings> User Settings> python configuration von "pyLint" in "pylint_Django" zu ändern.

 Linter Path Edit

Wenn Sie python 3 verwenden

python3 -m pip install pylint-Django

If python <3

python -m pip install pylint-Django==0.11.1

HINWEIS: Für Version 2.0 ist pylint> = 2.0 erforderlich, das Python 2 nicht mehr unterstützt! ( https://pypi.org/project/pylint-Django/ )

0
Ashen One

Ändere deinen Linter auf - flake8 und das Problem wird verschwinden.

0

Wie wäre es, Fehler in jeder Zeile, die für jeden Fehler spezifisch sind, zu unterdrücken?

So ähnlich: https://pylint.readthedocs.io/de/latest/user_guide/message-control.html

Fehler: [pylint] Die Klasse 'class_name' hat kein Mitglied 'member_name' Sie kann in dieser Zeile unterdrückt werden durch:

  # pylint: disable=no-member
0
Pritam Manerao

Addieren Sie einfach zu dem, was @ Mallory-Erik gesagt hat: Sie können objects = models.Manager() in den Modalen platzieren:

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