Django -- User.DoesNotExist does not exist?

24,255

Solution 1

The problem is really with PyDev, not your code. What you have done is absolutely correct, but IDEs will always have difficulty resolving attributes in a dynamic language like Python. In the case of the DoesNotExist exception, it is added via a __metaclass__ rather than through normal object inheritance, so PyDev is unlikely to be able to find it. However, it should definitely work.

Solution 2

I just discovered Pydev actually has a nice workaround for this.

Go to Window > Preferences, then Pydev > Editor > Code Analysis.

Click the Undefined tab and add "DoesNotExist" to the text box titled Consider the following names as globals.

Solution 3

Pydev has a workaround for such cases (when the members are defined at runtime). Just add #@UndefinedVariable at the end of the string which cause the warning (or ctrl+1 on keyboard when the cursor is at "DoesNotExist"), and it won't complain.

Solution 4

You can also solve it in a different way: just go to the User class, and add @DynamicAttrs in the docstring.
This will tell PyDev that attributes of the class are added dynamically, and will make it not complain any longer for "issues" like DoesNotExist.

Solution 5

Can Eclipse resolve attributes created runtime via __metaclass__es?

Notice that you never define a DoesNotExist on any of your models and it is not defined on django.db.models.base.Model either.

Share:
24,255
shanyu
Author by

shanyu

Mechanical Engineering + MBA + PhD in finance. Python & Javascript.

Updated on March 30, 2020

Comments

  • shanyu
    shanyu about 4 years

    I'm trying to get hold of Django. I use Pydev on Eclipse. I have written a simple signup page that I can't get to work. Eclipse complains that User.DoesNotExist is undefined. Most likely, I am missing something trivial. Here's the relevant portion of the code:

    from django.contrib.auth.models import User
    ...
    class SignUpForm (forms.Form):
        ...
        def clean_username (self): 
            try:
                User.objects.get(username=self.cleaned_data['username'])
            except User.DoesNotExist:
                return self.cleaned_data['username']
            raise forms.ValidationError(USERNAME_ALREADY_IN_USE)
        ...
    
  • muhuk
    muhuk about 15 years
    suggestion: Don't use an IDE with dynamic languages.
  • Jiaaro
    Jiaaro over 14 years
    Thank you so much - those red squiggly underlines have been bugging me for ages :)
  • DrBloodmoney
    DrBloodmoney about 14 years
    Thanks for this. I was mostly just ignoring and chalked it up to Python vs. Eclipse and being a dynamic language, etc. +1
  • SmileyChris
    SmileyChris about 14 years
    Glad to be of service :) Here's what my complete "consider as globals" box looks like: _,tr,DoesNotExist,MultipleObjectsReturned,base_fields,_meta,‌​ops,outbox