2

こんにちはこれが私のadmin.pyからの抜粋です

#admin.py
class UserForm(forms.ModelForm):
    class Meta:
        model = User

    def clean_email(self):
        email = self.cleaned_data['email']
        if User.objects.filter(email=email).exists():
            raise forms.ValidationError("This email already used")
        return email

class UserAdmin(admin.ModelAdmin):
    form = UserForm

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

これを使用して、すでに使用されているメールアドレスで新しいユーザーを作成できないことを確認します。問題は、既存のユーザーを編集すると、そのメールアドレスを持つユーザーがいるために検証チェックが失敗することですが、編集しているのはそれで問題ありません。

現在のユーザーとの一致を無視するようにフォーム検証を指示するにはどうすればよいですか?

4

2 に答える 2

5

クエリから現在のインスタンスを除外します。

def clean_email(self):
    email = self.cleaned_data['email']
    if User.objects.filter(email=email).exclude(pk=self.instance.pk).exists():
        raise forms.ValidationError("This email already used")
    return email
于 2012-08-01T10:26:06.483 に答える
0

uniqueモデルフィールドを使用して一意性を検証する方がはるかに優れています。

User一意の電子メール制約を持つカスタムモデルを使用できます。

独自のhttps://stackoverflow.com/a/1560617/527064で独自の検証を実装する方法の詳細については、こちらをご覧ください

于 2015-08-17T09:00:31.633 に答える