Использование Pylint с Django - PullRequest
       155

Использование Pylint с Django

128 голосов
/ 22 сентября 2008

Я бы очень хотел интегрировать pylint в процесс сборки для мои проекты на Python, но я наткнулся на один из них: один из типы ошибок, которые я считаю чрезвычайно полезными: E1101: *%s %r has no %r member* - постоянно сообщает об ошибках при использовании общих полей django, например:

E1101:125:get_user_tags: Class 'Tag' has no 'objects' member

что вызвано этим кодом:

def get_user_tags(username):
   """
   Gets all the tags that username has used.

   Returns a query set.
   """
   return Tag.objects.filter(  ## This line triggers the error.
       tagownership__users__username__exact=username).distinct()

# Here is the Tag class, models.Model is provided by Django:
class Tag(models.Model):
   """
   Model for user-defined strings that help categorize Events on
   on a per-user basis.
   """
   name = models.CharField(max_length=500, null=False, unique=True)

   def __unicode__(self):
       return self.name

Как настроить Pylint для правильного учета полей, таких как объекты? (Я также изучил исходный код Django и не смог найти реализацию objects, поэтому подозреваю, что это не «просто» поле класса. С другой стороны, я довольно новичок в python так что я вполне мог что-то упустить из виду.)

Редактировать: Единственный способ сообщить pylint, что он не должен предупреждать об этих предупреждениях, - это заблокировать все ошибки типа (E1101), что не является приемлемым решением, поскольку это (в мое мнение) крайне полезная ошибка. Если есть другой способ, не увеличивая источник Pylint, пожалуйста, укажите мне на детали:)

См. здесь для краткого описания проблем, с которыми я столкнулся с pychecker и pyflakes - они оказались весьма нестабильными для общего использования. (В случае с pychecker, сбои возникли в коде pychecker - не исходный код, который он загружал / вызывал.)

Ответы [ 13 ]

1 голос
/ 04 января 2009

Пока что я не нашел реального решения, но обойти:

  • В нашей компании нам нужен пилинт оценка> 8. Это позволяет кодировать практики Пилинт не понимает гарантируя, что код не слишком "необычно". До сих пор мы не видели любой случай, когда E1101 держал нас от достижения 8 или выше.
  • Наши цели "сделать проверку" отфильтровать "для не имеет" объектов " сообщения, чтобы удалить большую часть отвлечение, вызванное Pylint не понимая Джанго.
0 голосов
/ 29 марта 2019
  1. Перейти к настройкам в VSC, нажав Ctrl +,
  2. Нажмите Ctrl + Shift + p, введите Python: выберите Linter
  3. Выберите Mypy из выпадающего списка
  4. Установите mypy, если будет предложено.
0 голосов
/ 14 июня 2018

Для neovim & vim8 используйте w0rp's ale плагин. Если вы все правильно установили, включая w0rp's ale, pylint & pylint-django. В вашем vimrc добавьте следующую строку и получайте удовольствие от разработки веб-приложений с использованием django. Спасибо.

let g:ale_python_pylint_options = '--load-plugins pylint_django'
...