0

次のことを行いたい: - サイト ユーザーがフォームでメール アドレスを編集できるようにする。- 電子メールがデータベースに既に存在する場合、入力した電子メールが自分以外の誰かに属している限り、エラーが表示されます。したがって、A さんが test@yahoo.com というメールアドレスを入力し、B さんがすでにそのメールアドレスを持っている場合、エラーが発生します。人 A が test@yahoo.com という電子メールを入力し、それが彼女が使用していたのと同じ電子メールである場合、エラーはありません。

Djangoを使用してこれを行うにはどうすればよいですか?

次のコードがあります。

class UserEditForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ('first_name', 'email', 'last_name', )

    def clean_email(self):
        email = self.cleaned_data['email']

        if email == self.email:
            return email

        try:
            DjangoUser.objects.get(email=email)
            raise ValidationError('Email is already taken.')
        except DjangoUser.DoesNotExist:
            pass

        return email

    email = forms.EmailField(required=True)

問題は、self.email がその人の現在のメールアドレスを教えてくれないことです。:(

4

1 に答える 1

0

必要なのは、現在のユーザー(に保存されているrequest)、より正確には彼/彼女の電子メールです。

したがって、回避策として提案するのは、フォームにrequest//を渡すか設定することです。e-mailuser

フォームが作成された後、userform介して設定する例:view

# views.py
def someview(request):
    if request.method == 'POST':
        user_edit_form = UserEditForm(request.POST)
        user_edit_form.actual_user = request.user
        if user_edit_form.is_valid():
            do_some_stuff()

クラスベースのビューを使用する場合、アプローチはほとんど同じです。このように、あなたのフォームであなたはチェックすることができます:

self.actual_user.email == self.cleaned_data['email']

当然、ユーザー全体が必要ない場合は、ユーザーの電子メールのみを設定できます。

于 2013-02-26T16:03:32.860 に答える