У класса нет объектов


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: у класса 'Question' нет объектов 'member'

Я следую учебному пособию по 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, и это ничего не изменило.
зашифровано

какая у тебя версия на python и django?
Гэвин Ахтемайер

1
Версия Python 3.6.0 и Django 1.11.3
зашифрован

2
Для меня то, что решило проблему, было создание Managerэкземпляра в models.pyфайле. Обратитесь к документации Django для получения дополнительной информации.
Икрадж Мухаммед

Ответы:


335

Установите pylint-djangoс помощью pipследующего

pip install pylint-django

Затем в коде Visual Studio перейдите: Параметры пользователя ( Ctrl+ ,или Файл> Параметры> Настройки, если они доступны). Введите следующее (обратите внимание на фигурные скобки, необходимые для пользовательских настроек VSC):

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

где находится Настройки пользователя
cegprakash

Перейдите в Файл-> Настройки-> Настройки или используйте «Ctrl + Запятая»
Сукма Сапутра

30
Превосходно! Я также хотел бы отметить, что вы можете поместить опцию плагина в .pylintrcфайл следующим образом: load-plugins=pylint_django И таким образом он также будет выбран CLI, чтобы он работал в режиме непрерывной интеграции.
сибнерский

После этого я получаю [pylint] C0111:Missing module docstringошибку
Вишну Шарма

1
Более подробная информация в официальном документе: code.visualstudio.com/docs/python/…
Антон Данильченко,

97

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

Нажмите ctr + sft + P, чтобы открыть палитру команд . Теперь в командной палитре введите Preferences: Configure специфичные для языка настройки . Теперь выберите Python . Вот в правой части вставьте этот код

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

Внутри первые фигурные скобки. Убедитесь, что Пилинт-Джанго .

Надеюсь, это поможет!


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

4
Также не забудьте pip install pylint-django. Если расширение не установлено, это изменение в ваших настройках, по-видимому, происходит тихо, ломая все помехи.
Дастин

1
Спасибо. Вы можете найти ту же информацию в официальной документации VS Code здесь: code.visualstudio.com/docs/python/…
Антон Данильченко,

Это решило предыдущую ошибку. Но теперь предупреждение приходит. Missing module docstringpylint(missing-module-docstring), Что для этого можно сделать?
Оптидер

34

Установите Django Pylint:

pip install pylint-django

ctrl + shift + p> Предпочтения: настройка параметров языка> Python

Файл settings.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 не знает об этом, просматривая объявление класса, поэтому предупреждает вас о возможной ошибке (это не так). Объекты на самом деле экземпляр диспетчера, который помогает с запросом БД. Если вы действительно хотите избавиться от этого предупреждения, вы можете перейти ко всем своим моделям и добавить objects = models.Manager (). Теперь VSC увидит объявленные объекты и больше не будет жаловаться на него.


13
objects = models.Manager()в классе моделей сделал это для меня в VS Code. Спасибо.
Мэллори-Эрик

22

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

Путь Линтера Править


1
У меня работал на MacOS High Sierra и VSC 1.38, при условии, что ранее я запускал «pip install pylint-django» в моей виртуальной среде.
Андрес Меза-Эскаллон

1
это оно. самый простой способ сделать это LOL
benji8

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Кодексе ВС.

Но после этого вы заметите много новых ошибок линтинга. Затем прочитайте, что здесь сказано:

Эти аргументы передаются всякий раз, когда для параметра 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
Хотя это сработало, я обнаружил, что flake8 действительно раздражает как линтер.
Ричард Данн

4

Просто добавлю к тому, что @ Мэллори-Эрик сказал: Вы можете поместить 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



1

Делая Question = new Question()(я предполагаю, что newэто опечатка), вы перезаписываете модель Вопроса с интенцией Question. Как сказал Сэйс в комментариях: не используйте для своей переменной то же имя, что и название модели. Так что поменяй на что то подобное my_question = Question().


Это что-то с моей компьютерной конфигурацией Django и Pytho, я перекодировал это на моем MacBook, и он работает просто отлично. Также я попробовал ваше предложение в моем коде, и это не имело никакого значения.
зашифрован

1

Как насчет подавления ошибок в каждой строке, специфичной для каждой ошибки?

Примерно так: https://pylint.readthedocs.io/en/latest/user_guide/message-control.html

Ошибка: [pylint] Класс 'class_name' не имеет члена 'member_name'. В этой строке его можно подавить следующим образом:

  # 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

Мне удалось обновить пользователя settings.json

На моем Mac это было сохранено в:

~/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.