11

I just started developing on Django, and then I thought using the Syntastic syntax checker on it would be a good idea.

The problem is that it complains about some things being wrong when, in fact, they aren't.

Examples:

  1. For

    from django.core.urlresolvers import reverse
    

    I get:

    error| [F0401] Unable to import 'django.core.urlresolvers'
    
  2. For

    amount = self.sale_set.filter(date__year=year).aggregate(sum=Sum('amount'))["sum"]
    

    I get (where self is an Album)

    error| [E1101, Album.get_sales_total] Instance of 'Album' has no 'sale_set' member
    

This code runs perfectly even with these "errors", but how can I make Syntastic behave correctly?

CharlesB
  • 86,532
  • 28
  • 194
  • 218
Falassion
  • 711
  • 1
  • 7
  • 17

2 Answers2

5

piggybacking on @supervacuo's answer:

there is a way to get this working for syntastic and it's rather straightforward, if not easy to figure out for someone unfamiliar with syntastic options (like, say, me):

in your .vimrc, add this line:

let g:syntastic_python_pylint_args = "--load-plugins pylint_django"

of course, this does require pylint-django be installed in your environment

tom
  • 2,335
  • 1
  • 16
  • 30
nthall
  • 2,847
  • 1
  • 28
  • 36
4

Both of these messages come from pylint — you can see fuller explanations with pylint --help-msg=$ID, or on http://pylint-messages.wikidot.com/.

You can disable the checks with e.g. from django.core.urlresolvers import reverse # pylint: disable=F0401, but that gets tiresome pretty quickly.

There's a pylint plugin for Django which will definitely fix your E1101 (and I hope the F0401 too). Maybe have a go at installing the plugin and configuring Syntastic to use it?

supervacuo
  • 9,072
  • 2
  • 44
  • 61