Klasa nie ma elementu członkowskiego obiektów


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

Pierwsza linia tej funkcji wyświetla błąd Question.objects.all():

E1101: Klasa „Pytanie” nie ma elementu „element” obiektów

Postępuję zgodnie z samouczkiem dokumentacji Django i mają ten sam kod, który działa.

Próbowałem wywołać instancję.

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

Również mój models.pykod dla tej klasy to ...

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

Bez skutku nadal mam ten błąd.

Czytałem o pylincie i prowadziłem to ...

pylint --load-plugins pylint_django

Co nie pomogło, nawet jeśli plik readme na githubie mówi ...

Zapobiega ostrzeżeniom o atrybutach generowanych przez Django, takich jak Model.objects lub Views.request.

Uruchomiłem polecenie w moim virtualenv, ale nic.

Więc każda pomoc byłaby świetna.


7
Użyjpylint --generated-members=objects
Raja Simon

Przepraszam, uruchomiłem to w moim cmd i nic to nie zmieniło.
buuencrypted

jaka jest twoja wersja Pythona i Django?
Gavin Achtemeier

1
verson python 3.6.0 i django
1.11.3

2
Dla mnie rozwiązaniem problemu było utworzenie Managerinstancji w models.pypliku. Więcej informacji znajdziesz w dokumentacji django .
Ikraj mohammad

Odpowiedzi:


335

Zainstaluj, pylint-djangoużywając pipw następujący sposób

pip install pylint-django

Następnie w programie Visual Studio Code goto: User Settings ( Ctrl+ ,or File> Preferences> Settings if available) Wpisz następujące informacje (zwróć uwagę na nawiasy klamrowe, które są wymagane dla niestandardowych ustawień użytkownika w VSC):

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

gdzie są ustawienia użytkownika
cegprakash

Idź do Plik-> Preferencje-> Ustawienia lub użyj "Ctrl + przecinek"
Sukma Saputra

29
Doskonały! Chciałbym również zwrócić uwagę, że możesz umieścić opcję wtyczki w .pylintrcpliku takim jak ten: load-plugins=pylint_django W ten sposób zostanie ona również odebrana przez CLI, więc działałaby w ustawieniu ciągłej integracji.
sybnerian

Po wykonaniu tej czynności pojawia się [pylint] C0111:Missing module docstringbłąd
Vishnu Sharma

1
Więcej szczegółów w oficjalnym dokumencie: code.visualstudio.com/docs/python/ ...
Anton Danilchenko

98

Odpowiedź @ tieuminh2510 jest doskonała. Ale w nowszych wersjach VSC nie znajdziesz opcji edycji lub wklejania tego polecenia w Ustawieniach użytkownika . Teraz w nowszej wersji, aby dodać ten kod, wykonaj następujące kroki :

Naciśnij ctr + sft + P, aby otworzyć paletę poleceń . Teraz w palecie poleceń Preferencje typu : Konfiguruj ustawienia specyficzne dla języka . Teraz wybierz Python . Tutaj po prawej stronie wklej ten kod

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

Wewnątrz pierwsze szelki kręcone. Upewnij się, że pylint-django .

Mam nadzieję, że to pomoże!


6
nie zapomnij umieścić przecinka w pliku json, w przeciwnym razie nie będzie działać poprawnie.
Georgi Stoyanov

4
Nie zapomnij też o tym pip install pylint-django. Jeśli rozszerzenie nie jest zainstalowane, wydaje się, że ta zmiana ustawień nie powiedzie się po cichu, zrywając wszystkie problemy.
Dustin Michels

1
Dziękuję Ci. Te
Anton Danilchenko

To rozwiązało wcześniejszy błąd. Ale teraz nadchodzi ostrzeżenie. Missing module docstringpylint(missing-module-docstring). Co można z tym zrobić?
Optider

34

Zainstaluj pylint Django:

pip install pylint-django

ctrl + shift + p> Preferences: Skonfiguruj ustawienia specyficzne dla języka> Python

Plik settings.json dostępny dla języka Python powinien wyglądać jak poniżej:

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

    "[python]": {

    }
}

26

Oto odpowiedź. Pobrane z mojego posta na Reddicie ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

To nie jest błąd, to tylko ostrzeżenie od VSC. Django dodaje tę właściwość dynamicznie do wszystkich klas modelu (używa dużo magii pod maską), więc IDE nie wie o tym, patrząc na deklarację klasy, więc ostrzega cię o możliwym błędzie (tak nie jest). obiekty to w rzeczywistości instancja Managera, która pomaga w odpytywaniu bazy danych. Jeśli naprawdę chcesz pozbyć się tego ostrzeżenia, możesz przejść do wszystkich swoich modeli i dodać object = models.Manager () Teraz VSC zobaczy zadeklarowane obiekty i nie będzie na to ponownie narzekać.


13
objects = models.Manager()w klasie modelek zrobiłem to za mnie w VS Code. Dzięki.
Mallory-Erik

21

Wypróbowałem wszystkie możliwe rozwiązania, ale niestety moje ustawienia Vscode nie zmieniają ścieżki lintera. Tak więc postanowiłem zbadać ustawienia Vscode w ustawieniach> Ustawienia użytkownika> python . Znajdź Linting: Pylint Path i zmień go na „pylint_django”. Nie zapomnij zmienić lintera na „pylint_django” w ustawieniach> Ustawienia użytkownika> konfiguracja pythona z „pyLint” na „pylint_django”.

Edycja ścieżki linii


1
Pracowałem dla mnie na MacOS High Sierra i VSC 1.38, pod warunkiem, że wcześniej uruchomiłem "pip install pylint-django" w moim wirtualnym środowisku.
Andrés Meza-Escallón

12

AKTUALIZACJA DLA VS KOD 1.40.0

Po zrobieniu:

$ pip install pylint-django

Kliknij ten link: https://code.visualstudio.com/docs/python/linting#_default-pylint-rules

Zauważ, że sposobem pylintna uwzględnienie pylint-djangojest określenie:

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

w settings.jsonKodeksie VS.

Ale potem zauważysz wiele nowych błędów lintingu. Następnie przeczytaj, co tu napisano:

Te argumenty są przekazywane zawsze, gdy opcja python.linting.pylintUseMinimalCheckersjest ustawiona na true(wartość domyślna). Jeśli określisz wartość w pylintArgspliku konfiguracyjnym Pylint lub użyjesz go (zobacz następną sekcję), pylintUseMinimalCheckersto niejawnie zostanie ustawiona wartość false .

To, co zrobiłem, to utworzenie .pylintrcpliku zgodnie z opisem w linku, a następnie skonfigurowanie następujących parametrów w pliku (pozostawiając resztę pliku nietkniętą):

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

Teraz pylintdziała zgodnie z oczekiwaniami.


Zamiast tworzyć osobny plik .pylintrc, możesz uzyskać ten sam efekt, robiąc to w swoim pliku settings.json: {"python.linting.pylintArgs": ["--load-plugins = pylint_django", "--disable = all "," --enable = F, E, unreachable, zduplikowany klucz, niepotrzebny-średnik, zmienna-globalna-nieprzypisana, nieużywana-zmienna, wyjątek-operacji-binarnej, łańcuch-złego formatu, anomalny-odwrotny ukośnik-w -string, zły tryb otwarcia "]}
sql_knievel

11

Możesz zmienić linter dla rozszerzenia Python dla Visual Studio Code.

W VS otwórz paletę poleceń Ctrl + Shift + P i wpisz jedno z następujących poleceń:

Python: wybierz Linter

kiedy wybierzesz linter, zostanie on zainstalowany. Próbowałem Flake8 i wydaje mi się, że problem został rozwiązany.


1
Chociaż to zadziałało, okazało się, że flake8 jest naprawdę irytujący jako linter.
Richard Dunn,

4

Po prostu dodając to, co powiedział @ Mallory-Erik: Możesz umieścić objects = models.Manager()to w modalach:

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

Najpierw zainstaluj pylint-django za pomocą następującego polecenia

$ pip install pylint-django

Następnie uruchom drugie polecenie w następujący sposób:

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django jest niezbędne do poprawnego przeglądu kodu django



1

Robiąc Question = new Question()(zakładam, że newjest to literówka), nadpisujesz model pytania z intencją Question. Jak Sayse powiedział w komentarzach: nie używaj tej samej nazwy dla swojej zmiennej, co nazwa modelu. Więc zmień to na coś takiego my_question = Question().


to coś z moją konfiguracją django i pytho na PC, przekodowałem to na moim Macbooku i działa dobrze. Spróbowałem również sugestii ur w moim kodzie i nie miało to znaczenia.
buuencrypted

1

A co z pomijaniem błędów w każdym wierszu specyficznym dla każdego błędu?

Coś takiego: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Błąd: [pylint] Klasa „nazwa_klasy” nie ma elementu „nazwa_członka”. Można to ukryć w tym wierszu przez:

  # pylint: disable=no-member

2
Mimo brutalnej siły to rozwiązanie jest jedynym sposobem na zachowanie zdrowia psychicznego. Otrzymuję te błędy na dziesiątkach różnych modułów, nie zamierzam zmieniać ustawień za każdym razem, gdy zobaczę nowy.
Przemek D


0

Ten problem występuje, gdy używam pylint_runner

Otwieram plik .pylintrc i dodajemy to

# 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

Udało mi się zaktualizować ustawienia użytkownika .json

Na moim Macu był przechowywany w:

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

W jej ramach ustawiłem:

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

To rozwiązało problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.