У класу немає члена об'єкта


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

Перший рядок цієї функції отримує помилку на Question.objects.all():

E1101: Клас 'Питання' не має об’єктів 'член'

Я слідую посібнику з документації Django, і у них є той самий код, який працює і працює.

Я спробував викликати екземпляр.

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 --load-plugins pylint_django

Що не допомогло, навіть у файлі readme github йдеться ...

Запобігає попередженням про атрибути, створені Django, такі як Model.objects або Views.request.

Я керував командою в межах свого virtualenv, і все ж нічого.

Тож будь-яка допомога була б чудовою.


7
Використанняpylint --generated-members=objects
Раджа Саймон

Вибачте, запустив його в моєму cmd і це нічого не змінило.
зашифровано

яка ваша версія пітона та джанго?
Гевін Ахтемейер

1
verson python 3.6.0 та django 1.11.3
bucencrypted

2
Для мене те, що вирішило проблему, було створення Managerекземпляра у models.pyфайлі. Для отримання додаткової інформації зверніться до документації про джанго .
Ikraj mohammad

Відповіді:


335

Встановіть pylint-djangoза допомогою pipнаступного

pip install pylint-django

Потім у візуальному коді Visual Studio перейдіть: Налаштування користувача ( Ctrl+ ,або Файл> Налаштування> Налаштування, якщо вони доступні) Введіть наступне (будь-ласка, зверніть увагу на фігурні дужки, необхідні для користувацьких налаштувань користувача у VSC):

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

де налаштування користувача
cegprakash

Перейдіть у меню Файл-> Налаштування-> Налаштування або скористайтеся "Ctrl + Comma"
Sukma Saputra

29
Відмінно! Я також зазначу, що ви можете розмістити опцію плагіну у такий .pylintrcфайл: load-plugins=pylint_django І таким чином його підбере CLI, щоб він працював у режимі безперервної інтеграції.
сибнеріан

Після цього я отримую [pylint] C0111:Missing module docstringпомилку
Vishnu Sharma

1
Більш детально в офіційному документі: code.visualstudio.com/docs/python/…
Антон Данильченко

98

@ tieuminh2510 відповідь ідеальна. Але в нових версіях VSC ви не знайдете опцію редагувати або вставляти цю команду в Налаштуваннях користувача . Тепер у новій версії, щоб додати цей код, виконайте наступні дії :

Натисніть ctr + sft + P, щоб відкрити палітру команд . Тепер у палітрі команд Виберіть Налаштування: Налаштування параметрів мови . Тепер виберіть Python . Тут у правій частині вставте цей код

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

Всередині перших фігурних брекетів. Переконайтеся, що пілінт-джанго .

Сподіваюся, це допоможе!


6
не забудьте поставити кому у файл json, інакше вона не працюватиме належним чином.
Георгій Стоянов

4
Також не забувайте pip install pylint-django. Якщо розширення не встановлено, ця зміна ваших налаштувань здається тихою, порушуючи всю обшивку.
Дастін Міхельс

1
Дякую. Цю інформацію ви можете знайти в офіційній документації щодо коду VS тут: code.visualstudio.com/docs/python/…
Антон

Це вирішило попередню помилку. Але, зараз приходить попередження. Missing module docstringpylint(missing-module-docstring). Що можна зробити для цього?
Оптідер

34

Встановіть Django pylint

pip install pylint-django

ctrl + shift + p> Налаштування: Налаштування специфічних для мови параметрів> Python

Доступний параметр.json для мови python має виглядати нижче:

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

    "[python]": {

    }
}

26

Ось відповідь. Отримав з моєї публікації reddit ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

Це не помилка, це лише попередження від VSC. Django додає це властивість динамічно для всіх модельних класів (він використовує багато магії під кришкою), тому IDE не знає про це, дивлячись на декларацію класу, тому він попереджає про можливу помилку (це не так). об'єкти насправді є екземпляром менеджера, який допомагає в запиті БД. Якщо ви дійсно хочете позбутися цього попередження, можете перейти до всіх своїх моделей і додати об’єкти = models.Manager () Тепер VSC побачить об’єкти, задекларовані, і не буде скаржитися на це знову.


13
objects = models.Manager()в класі моделей це зробили для мене у VS Code. Дякую.
Маллорі-Ерік

21

Я спробував усі можливі запропоновані рішення, але, на жаль, мої параметри vscode не змінили шлях лінійки. Отже, я прагну вивчити параметри vscode у налаштуваннях> Налаштування користувача> python . Знайдіть лінінг: Pylint Path та змініть його на "pylint_django". Не забудьте змінити лінійку на "pylint_django" у налаштуваннях> Налаштування користувача> конфігурація python з "pyLint" на "pylint_django".

Редагування шляху лінійки


1
Працював для мене на MacOS High Sierra та VSC 1.38, за умови, що раніше я працював у "віртуальній обстановці" на pip install pylint-django.
Андрес Меза-Ескаллон

12

ОНОВЛЕННЯ КОДУ VS КОД 1.40.0

Після виконання:

$ pip install pylint-django

Перейдіть за цим посиланням: https://code.visualstudio.com/docs/python/linting#_default-pylint-rules

Зауважте, що спосіб pylintврахувати pylint-djangoце, вказавши:

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

у settings.jsonКодексі VS.

Але після цього ви помітите багато нових помилок зв’язування. Потім прочитайте, що тут сказано:

Ці аргументи передаються щоразу, коли python.linting.pylintUseMinimalCheckersвстановлено значення true(за замовчуванням). Якщо ви вказуєте значення pylintArgsабо використовуєте файл конфігурації Pylint (див. Наступний розділ), то pylintUseMinimalCheckersявно встановлено значення false .

Що я зробив, це створити .pylintrcфайл, як описано у посиланні, а потім налаштувати наступні параметри всередині файлу (залишок файлу залишити недоторканим):

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

Зараз pylintпрацює як очікувалося.


Замість того, щоб створити окремий .pylintrc файл, ви можете отримати той самий ефект, зробивши це у своїх settings.json: {"python.linting.pylintArgs": ["--load-plugins = pylint_django", "--disable = all "," --enable = F, E, недоступний, дублікат ключа, непотрібна крапка з комою, глобальна змінна-не присвоєна, невикористана змінна, бінарний оп-виняток, неправильний-рядок-рядок, аномальний зворотний косий рядок -string, bad-open-mode "]}
sql_knievel

11

Ви можете змінити вкладиш для розширення Python для коду Visual Studio.

У VS відкрийте палітру команд Ctrl + Shift + P і введіть одну з наступних команд:

Python: Виберіть Linter

при виборі лайнера він буде встановлений. Я спробував flake8, і, здається, проблема вирішена для мене.


1
Хоча це і працювало, я виявив, що пластівці8 насправді дратують як лайнер.
Річард Данн

4

Просто додавши до того, що сказала @ 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()

3

Спочатку встановіть pylint-django за допомогою наступної команди

$ pip install pylint-django

Потім запустіть другу команду наступним чином:

$ pylint test_file.py --load-plugins pylint_django

--load-plugins pylint_django необхідний для правильного перегляду коду django


2

Якщо ви використовуєте python 3

python3 -m pip install pylint-django

Якщо пітон <3

python -m pip install pylint-django==0.11.1

ПРИМІТКА: Версія 2.0 вимагає pylint> = 2.0, який більше не підтримує Python 2! ( https://pypi.org/project/pylint-django/ )


1

Роблячи Question = new Question()(я припускаю, що newце помилка), ви переписуєте модель запитання з примірником Question. Як сказав Сайс у коментарях: не використовуйте те саме ім'я для вашої змінної, як ім'я моделі. Тож змініть це на щось подібне my_question = Question().


це щось із моїм ПК-конфігурацією django та pytho, я перекодував це на моєму macbook, і він працює чудово. Крім того, я спробував ур пропозицію у своєму коді, і це не мало значення.
buuencrypted

1

Як щодо придушення помилок у кожному рядку, характерних для кожної помилки?

Щось подібне: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Помилка: [pylint] Клас 'class_name' не має 'member_name' member. Його можна придушити в цьому рядку:

  # pylint: disable=no-member

2
Настільки жорстоким, як це рішення, це єдиний спосіб зберегти здоровий розум. Я отримую ці помилки на десятках різних модулів, я не збираюся змінювати налаштування щоразу, коли бачу новий.
Przemek D


0

Ця проблема трапляється, коли я використовую pylint_runner

Тому я відкриваю .pylintrc файл і додаю це

# 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

Мені вдалося оновити налаштування користувача.json

На моєму комп'ютері він зберігався в:

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

У ньому я встановив наступне:

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

Це вирішило для мене питання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.