36

我正试图抓住 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)
    ...
4

7 回答 7

26

问题出在 PyDev 上,而不是你的代码上。您所做的是绝对正确的,但 IDE 总是难以解析 Python 等动态语言中的属性。在 DoesNotExist 异常的情况下,它是通过 a__metaclass__而不是通过正常的对象继承添加的,因此 PyDev 不太可能找到它。但是,它绝对应该有效。

于 2009-05-12T09:11:26.387 回答
19

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

转到Window > Preferences,然后Pydev > Editor > Code Analysis

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

于 2009-09-07T23:00:34.663 回答
8

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

于 2009-05-12T09:29:50.333 回答
2

Eclipse 可以通过__metaclass__es 解析创建运行时的属性吗?

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

于 2009-05-12T09:03:12.703 回答
2

您也可以用不同的方式解决它:只需转到 User 类,然后在文档字符串中添加 @DynamicAttrs。
这将告诉 PyDev 该类的属性是动态添加的,并且不会再抱怨像 DoesNotExist 这样的“问题”。

于 2010-04-07T10:34:25.543 回答
1

我在 VirtualEnv 中的 Ubuntu 上遇到了同样的问题,以解决我使用这个片段的问题。

http://djangosnippets.org/snippets/191/#c3091

在 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
于 2010-06-18T12:13:58.100 回答
1

Eclipse 抱怨 User.DoesNotExist 未定义。

你是什​​么意思?你有python错误和堆栈跟踪吗?此代码必须有效(如文档中所示)。看起来像一个日食问题。只需运行开发服务器,看看它是否有效:

manage.py runserver
于 2009-05-12T09:10:16.980 回答