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例外の場合、__metaclass__通常のオブジェクト継承ではなく、経由で追加されるため、PyDevがそれを見つけることができない可能性があります。ただし、間違いなく機能するはずです。

于 2009-05-12T09:11:26.387 に答える
19

Pydevが実際にこれに対して優れた回避策を持っていることを発見しました。

[ウィンドウ] >[設定]、 [ Pydev ] >[エディター] >[コード分析]の順に移動します。

[未定義]タブをクリックし、[次の名前をグローバルと見なす]というタイトルのテキストボックスに「DoesNotExist」を追加します。

于 2009-09-07T23:00:34.663 に答える
8

Pydevには、このような場合の回避策があります(メンバーが実行時に定義されている場合)。文字列の最後に#@ UndefinedVariableを追加するだけで、警告(または、カーソルが「DoesNotExist」にある場合はキーボードのctrl + 1)が発生し、文句は表示されません。

于 2009-05-12T09:29:50.333 に答える
2

Eclipseは__metaclass__esを介してランタイムで作成された属性を解決できますか?

DoesNotExistどのモデルにもを定義することはなく、どちらにも定義されていないことに注意してくださいdjango.db.models.base.Model

于 2009-05-12T09:03:12.703 に答える
2

別の方法で解決することもできます。Userクラスに移動し、docstringに@DynamicAttrsを追加するだけです。
これにより、クラスの属性が動的に追加され、DoesNotExistのような「問題」について文句を言わなくなることがPyDevに通知されます。

于 2010-04-07T10:34:25.543 に答える
1

Eclipseは、User.DoesNotExistが未定義であると文句を言います。

それはどういう意味ですか?Pythonエラーとスタックトレースがありますか?このコードは機能する必要があります(ドキュメントのように)。日食の問題のように見えます。開発サーバーを実行して、機能するかどうかを確認します。

manage.py runserver
于 2009-05-12T09:10:16.980 に答える
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 に答える