【问题标题】:Django -- User.DoesNotExist does not exist?Django -- User.DoesNotExist 不存在?
【发布时间】:2010-10-25 11:55:11
【问题描述】:

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

【问题讨论】:

  • +1 作为问题标题。
  • 你试过运行代码吗?只是 pydev 抱怨还是根本不起作用?
  • 它可以工作,但除非我把代码拿出来,否则它不会让我在 pydev 上调试。

标签: python django authentication django-models pydev


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      转到Window > Preferences,然后Pydev > Editor > 代码分析.

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

      【讨论】:

      • 非常感谢 - 那些红色波浪下划线一直困扰着我多年 :)
      • 谢谢。我大多只是忽略并将其归结为 Python 与 Eclipse 以及作为一种动态语言等。+1
      • 很高兴为您服务 :) 这是我完整的“考虑为全局变量”框的样子:_,tr,DoesNotExist,MultipleObjectsReturned,base_fields,_meta,ops,outbox
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 感谢您的洞察力。它有效,但是这个问题有一个非常痛苦的副作用:我无法在 pydev 上调试!有趣的是,当我从代码中取出部分时,我可以无缝调试。有什么建议吗?
        • 建议:不要使用带有动态语言的 IDE。
        【解决方案6】:

        Eclipse 抱怨 User.DoesNotExist 未定义。

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

        manage.py runserver
        

        【讨论】:

          【解决方案7】:

          Eclipse 能否解析通过__metaclass__es 创建的运行时属性?

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-10-14
            • 2015-02-19
            • 1970-01-01
            • 1970-01-01
            • 2016-02-04
            • 1970-01-01
            • 2014-07-16
            • 2017-01-23
            相关资源
            最近更新 更多