Python Django--User.DoesNotExist不存在?

Python Django--User.DoesNotExist不存在?,python,django,authentication,django-models,pydev,Python,Django,Authentication,Django Models,Pydev,我在找Django。我在Eclipse上使用Pydev。我已经写了一个简单的注册页面,我无法工作。Eclipse抱怨User.DoesNotExist未定义。很可能,我遗漏了一些琐碎的东西。以下是代码的相关部分: from django.contrib.auth.models import User ... class SignUpForm (forms.Form): ... def clean_username (self): try:

我在找Django。我在Eclipse上使用Pydev。我已经写了一个简单的注册页面,我无法工作。Eclipse抱怨User.DoesNotExist未定义。很可能,我遗漏了一些琐碎的东西。以下是代码的相关部分:

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)
    ...

Eclipse能否解析通过
\uuuuu元类\uuuuu
es在运行时创建的属性

请注意,您从未在任何模型上定义过
DoesNotExist
,也没有在
django.db.models.base.Model
上定义它

Eclipse抱怨User.DoesNotExist未定义

你这是什么意思?您是否有python错误和堆栈跟踪?此代码必须工作(如中所示)。看起来像是日食问题。只需运行dev server并查看它是否工作:

manage.py runserver

真正的问题在于PyDev,而不是您的代码。您所做的是绝对正确的,但是IDE总是很难在Python这样的动态语言中解析属性。在DoesNotExist异常的情况下,它是通过
\uuuu元类而不是通过普通的对象继承添加的,因此PyDev不太可能找到它。但是,它肯定会起作用。

Pydev有一个解决这种情况的方法(当在运行时定义成员时)。
只要在字符串的末尾添加#@UndefinedVariable,它就会产生警告(或者在光标位于“DoesNotExist”时在键盘上按ctrl+1),它就不会抱怨了。

我刚刚发现Pydev实际上有一个很好的解决方法

进入窗口首选项,然后进入Pydev编辑器代码分析


单击未定义选项卡,并将“DoesNotExist”添加到标题为的文本框中,将以下名称视为全局名称

您也可以用不同的方式解决它:只需转到用户类,并在docstring中添加@DynamicAttrs。

这将告诉PyDev类的属性是动态添加的,并且将使它不再抱怨DoesNotExist之类的“问题”。

我在一个VirtualEnv中的Ubuntu上也遇到了同样的问题,为了解决这个问题,我使用了这些代码片段

在parituclar中,他使用以下代码创建自定义用户字段:

class UserField(forms.CharField):
    def clean(self, value):
        super(UserField, self).clean(value)
        try:
            User.objects.get(username=value)
            raise forms.ValidationError("Someone is already using this username. Please pick an other.")
        except User.DoesNotExist:
            return value

+问题标题为1。您是否尝试运行代码?这只是pydev的抱怨还是根本不起作用?它起作用了,但除非我拿出代码,否则它不会让我在pydev上调试。谢谢你的洞察力。它可以工作,但是这个问题有一个非常痛苦的副作用:我不能在pydev上调试!有趣的是,当我从代码中取出部分时,我可以无缝地进行调试。不安的建议?建议:不要使用带有动态语言的IDE。非常感谢-那些红色的弯曲下划线困扰了我很多年:)谢谢。我基本上只是忽略了这一点,并将其归因于Python vs.Eclipse和作为一种动态语言,等等。我很高兴能为大家服务:)下面是我完整的“视为全局”框的样子:u,tr,DoesNotExist,multipleobjectsreered,base_fields,_meta,ops,outbox