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

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, и все же ничего.

Так что любая помощь будет отличной.

buuencrypted
источник
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"
],}
tieuminh2510
источник
где находится Настройки пользователя
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",
    ]

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

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

FightWithCode
источник
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]": {

    }
}
user3785966
источник
26

Вот ответ. Получено из моего поста Reddit ... https://www.reddit.com/r/django/comments/6nq0bq/class_question_has_no_objects_member/

Это не ошибка, это просто предупреждение от VSC. Django добавляет это свойство динамически ко всем классам модели (в нем используется много волшебства), поэтому IDE не знает об этом, просматривая объявление класса, поэтому предупреждает вас о возможной ошибке (это не так). Объекты на самом деле экземпляр диспетчера, который помогает с запросом БД. Если вы действительно хотите избавиться от этого предупреждения, вы можете перейти ко всем своим моделям и добавить objects = models.Manager (). Теперь VSC увидит объявленные объекты и больше не будет жаловаться на него.

buuencrypted
источник
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работает как положено.

amedina
источник
Вместо того, чтобы создавать отдельный файл .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

Чираг Калал
источник
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, и он работает просто отлично. Также я попробовал ваше предложение в моем коде, и это не имело никакого значения.
зашифрован
1

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

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

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

  # pylint: disable=no-member
Притам Манерао
источник
2
Как бы грубо ни было это решение, это единственный способ сохранить здравомыслие. Я получаю эти ошибки на десятках разных модулей, я не собираюсь менять настройки каждый раз, когда вижу новый.
Przemek D
1

Поменяйте линтер на - flake8, и проблема исчезнет.

Вену Гопал Тевари
источник
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"]
}

Это решило проблему для меня.

Кингсли Иджома
источник