it-swarm.com.ru

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

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: Класс 'Questionhas no objectsmember`

Я следую учебному пособию по 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, и все же ничего.

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

63
buuencrypted

Установите pylint-Django, используя pip, следующим образом

pip install pylint-Django

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

{"python.linting.pylintArgs": [
     "--load-plugins=pylint_Django"
],}
217
tieuminh2510

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

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

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

Внутри первых фигурных скобок . Убедитесь, что pylint-Django.

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

20
FightWithCode

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

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

14
buuencrypted

Вы можете изменить линтер для расширения Python для кода Visual Studio.

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

Python: выберите Linter

при выборе линтера он будет установлен. Я попытался flake8, и, кажется, проблема решена для меня.

6
moth

Сначала установите pylint-Django , используя следующую команду

$ pip install pylint-Django

Затем выполните вторую команду следующим образом:

$ pylint test_file.py --load-plugins pylint_Django

- load-plugins pylint_Django необходим для корректного просмотра кода Django

1
Chirag Kalal

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

1
voodoo-burger

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

 Linter Path Edit

0
Willy satrio nugroho

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

0
Venu Gopal Tewari

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

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

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

  # pylint: disable=no-member
0
Pritam Manerao

Просто добавив к сказанному @ 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()
0
LeRoy