Klasse hat kein Objektmitglied


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

In der ersten Zeile dieser Funktion wird ein Fehler angezeigt Question.objects.all() :

E1101: Klasse 'Frage' hat keine Objekte 'Mitglied'

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

Ich habe versucht, eine Instanz aufzurufen.

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

Auch mein models.pyCode für diese Klasse ist dieser ...

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 dies ausgeführt ...

pylint --load-plugins pylint_django

Was nicht geholfen hat, obwohl in der Github-Readme-Datei steht ...

Verhindert Warnungen vor von Django generierten Attributen wie Model.objects oder Views.request.

Ich habe den Befehl in meiner virtuellen Umgebung ausgeführt und trotzdem nichts.

Jede Hilfe wäre also großartig.


7
Verwenden Siepylint --generated-members=objects
Raja Simon

Sorry, lief es in meinem cmd und es hat nichts geändert.
Buuencrypted

Was ist deine Python- und Django-Version?
Gavin Achtemeier

1
verson python 3.6.0 und django 1.11.3
buuencrypted

2
Für mich löste das Problem das Erstellen einer ManagerInstanz in der models.pyDatei. Weitere Informationen finden Sie in der Django-Dokumentation .
Ikraj Mohammed

Antworten:


335

Installieren Sie pylint-djangounter Verwendung von pipwie folgt

pip install pylint-django

Gehen Sie dann in Visual Studio Code 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"
],}

Wo ist Benutzereinstellungen
Cegprakash

Gehen Sie zu Datei-> Einstellungen-> Einstellungen oder verwenden Sie "Strg + Komma"
Sukma Saputra

29
Ausgezeichnet! Ich möchte auch darauf hinweisen, dass Sie die Plugin-Option .pylintrcwie load-plugins=pylint_django folgt in eine Datei einfügen können: Auf diese Weise wird sie auch von der CLI übernommen, sodass sie in einer kontinuierlichen Integrationseinstellung funktioniert.
Sibnerian

Danach bekomme ich eine [pylint] C0111:Missing module docstringFehlermeldung
Vishnu Sharma

1
Weitere Details im offiziellen Dokument: code.visualstudio.com/docs/python/…
Anton Danilchenko

98

@ tieuminh2510 Antwort ist perfekt. In neueren Versionen von VSC finden Sie jedoch nicht die Option, diesen Befehl in den Benutzereinstellungen zu bearbeiten oder einzufügen . Führen Sie in der neueren Version die folgenden Schritte aus , um diesen Code hinzuzufügen :

Drücken Sie Strg + sft + P das die öffnen Befehlspalette . Geben Sie nun in der Befehlspalette Einstellungen ein: Konfigurieren Sie sprachspezifische Einstellungen . Wählen Sie nun Python . Fügen Sie hier rechts 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!


6
Vergessen Sie nicht, ein Komma in die JSON-Datei einzufügen, da dies sonst nicht ordnungsgemäß funktioniert.
Georgi Stoyanov

4
Vergiss auch nicht pip install pylint-django. Wenn die Erweiterung nicht installiert ist, scheint diese Änderung Ihrer Einstellungen leise fehlzuschlagen und alle Flusen zu beschädigen.
Dustin Michels

1
Danke dir. Sie finden die gleichen Informationen in der offiziellen VS Code-Dokumentation hier: code.visualstudio.com/docs/python/…
Anton Danilchenko

Es hat den früheren Fehler behoben. Aber jetzt kommt eine Warnung. Missing module docstringpylint(missing-module-docstring). Was kann man dafür tun?
Optider

34

Installieren Sie Django Pylint:

pip install pylint-django

Strg + Umschalt + P> Einstellungen: Sprachspezifische Einstellungen konfigurieren> Python

Die für die Python-Sprache verfügbare settings.json sollte wie folgt aussehen:

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

    "[python]": {

    }
}

26

Hier ist die Antwort. Von meinem reddit-Beitrag erhalten ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

Das ist kein Fehler, sondern nur eine Warnung von VSC. Django fügt diese Eigenschaft dynamisch allen Modellklassen hinzu (es verbraucht viel Magie unter der Haube), sodass die IDE anhand der Klassendeklaration nichts davon weiß und Sie vor einem möglichen Fehler warnt (dies ist nicht der Fall). objects ist in der Tat eine Manager-Instanz, die beim Abfragen der Datenbank hilft. Wenn Sie diese Warnung wirklich entfernen möchten, können Sie zu allen Ihren Modellen gehen und Objekte = Modelle hinzufügen. Manager () Jetzt sieht VSC die deklarierten Objekte und beschwert sich nicht erneut darüber.


13
objects = models.Manager()in der Modellklasse hat es für mich in VS Code gemacht. Vielen Dank.
Mallory-Erik

21

Ich habe alle möglichen Lösungen ausprobiert, aber leider haben meine vscode-Einstellungen den Linterpfad nicht geändert. Daher versuche ich, die vscode-Einstellungen unter Einstellungen> Benutzereinstellungen> Python zu untersuchen . Suchen Sie nach Flusen: Pylint-Pfad und ändern Sie ihn in "pylint_django". Vergessen Sie nicht, den Linter unter Einstellungen> Benutzereinstellungen> Python-Konfiguration von "pyLint" auf "pylint_django" in "pylint_django" zu ändern.

Linter Path Edit


1
Arbeitete für mich unter MacOS High Sierra und VSC 1.38, vorausgesetzt, ich habe zuvor "pip install pylint-django" in meiner virtuellen Umgebung ausgeführt.
Andrés Meza-Escallón

12

UPDATE FÜR VS CODE 1.40.0

Danach:

$ pip install pylint-django

Folgen Sie diesem Link: https://code.visualstudio.com/docs/python/linting#_default-pylint-rules

Beachten Sie, dass Sie Folgendes pylintberücksichtigen müssen, pylint-djangoindem Sie Folgendes angeben:

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

in dem settings.json von VS Code.

Aber danach werden Sie viele neue Flusenfehler bemerken. Lesen Sie dann, was hier gesagt wurde:

Diese Argumente werden immer dann übergeben, wenn das python.linting.pylintUseMinimalCheckersauf true(Standard) gesetzt ist. Wenn Sie einen Wert in pylintArgseiner Pylint-Konfigurationsdatei angeben oder diese verwenden (siehe nächster Abschnitt), pylintUseMinimalCheckerswird dieser implizit auf false gesetzt .

Ich habe eine .pylintrcDatei wie im Link beschrieben erstellt und anschließend die folgenden Parameter in der Datei konfiguriert (der Rest der Datei bleibt unberührt):

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

Funktioniert jetzt pylintwie erwartet.


Anstatt eine separate .pylintrc-Datei zu erstellen, können Sie den gleichen Effekt erzielen, indem Sie dies in Ihrer settings.json tun: {"python.linting.pylintArgs": ["--load-plugins = pylint_django", "--disable = all "," --enable = F, E, nicht erreichbar, doppelter Schlüssel, unnötiges Semikolon, globale Variable, nicht zugewiesen, nicht verwendete Variable, binäre Op-Ausnahme, Zeichenfolge mit schlechtem Format, anomaler Backslash-In -string, bad-open-mode "]}
sql_knievel

11

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

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

Python: Wählen Sie Linter

Wenn Sie einen Linter auswählen, wird dieser installiert. Ich habe flake8 ausprobiert und es scheint, dass das Problem für mich behoben ist.


1
Während dies funktionierte, fand ich flake8 als Linter wirklich nervig.
Richard Dunn

4

objects = models.Manager()Fügen Sie einfach hinzu, was @ Mallory-Erik gesagt hat: Sie können es in die Modalitäten einfügen:

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

Installieren Sie zuerst pylint-django mit dem folgenden 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 Django-Code korrekt zu überprüfen


2

Wenn Sie Python 3 verwenden

python3 -m pip install pylint-django

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


1

Wenn Sie dies tun Question = new Question()(ich nehme an, das newist ein Tippfehler), überschreiben Sie das Fragenmodell mit der Absicht Question. Wie Sayse in den Kommentaren sagte: Verwenden Sie für Ihre Variable nicht denselben Namen wie den Namen des Modells. Ändern Sie es also in so etwas wie my_question = Question().


Es ist etwas mit meiner PC-Konfiguration von Django und Python, ich habe es auf meinem MacBook neu codiert und es funktioniert einwandfrei. Außerdem habe ich unseren Vorschlag in meinem Code ausprobiert und es machte keinen Unterschied.
Buuencrypted

1

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

So etwas wie das: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Fehler: [pylint] Klasse 'Klassenname' hat kein Mitglied 'Mitgliedsname'. Sie kann in dieser Zeile unterdrückt werden durch:

  # pylint: disable=no-member

2
So brutal diese Lösung auch ist, es ist der einzige Weg, die eigene Gesundheit zu bewahren. Ich erhalte diese Fehler bei Dutzenden verschiedener Module. Ich werde die Einstellungen nicht jedes Mal ändern, wenn ich ein neues sehe.
Przemek D


0

Dieses Problem trat auf, wenn ich pylint_runner verwende

Also öffne ich die .pylintrc-Datei und füge diese hinzu

# 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

Ich konnte die user settings.json aktualisieren

Auf meinem Mac wurde es gespeichert in:

~/Library/Application Support/Code/User/settings.json

Darin stelle ich Folgendes ein:

{
    "python.linting.pycodestyleEnabled": true,
    "python.linting.pylintEnabled": true,
    "python.linting.pylintPath": "pylint",
    "python.linting.pylintArgs": ["--load-plugins", "pylint_django"]
}

Das hat das Problem für mich gelöst.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.