[英]How to override django 'unique' error message for username in custom UserChangeForm
我正在嘗試覆蓋默認的“具有該用戶名的用戶已存在”。 在我的自定義UserChangeForm
表單中輸入現有用戶名時顯示的錯誤消息。 使用的Django版本:1.6.1
這是我的代碼:
class CustomUserChangeForm(forms.ModelForm):
username = forms.RegexField(
label="User name", max_length=30, regex=r"^[\w.@+-]+$",
error_messages={
'invalid': ("My message for invalid"),
'unique': ("My message for unique") # <- THIS
}
)
class Meta:
model = get_user_model()
fields = ('username', 'first_name', 'last_name', 'email',)
但是,如果我使用此代碼輸入現有用戶名,我仍然會獲得默認“具有該用戶名的用戶已存在”。 信息。 請注意,輸入錯誤的用戶名(包含無效字符)時會顯示自定義“我的無效郵件”。
目前,無法在表單字段級別自定義unique
錯誤消息,引用文檔 :
CharField類(** kwargs)
...
錯誤消息鍵:required,max_length,min_length
...
regexField類(** kwargs)
...
錯誤消息鍵:必需,無效
因此,總而言之,對於僅required
的username
min_length
段, invalid
, max_length
, min_length
錯誤消息是可自定義的。
您只能在模型字段級別上設置unique
錯誤消息(請參閱源代碼 )。
另見相關票 。
另請參閱如何制作django.contrib.auth.forms.UserCreationForm (注意自定義duplicate_username
錯誤消息) - 自定義錯誤消息也可能是您的選項。
希望有所幫助。
根據alecxe的回答 ,我最終在我的表單中創建了一個自定義驗證方法:
class CustomUserChangeForm(forms.ModelForm):
error_messages = {
'duplicate_username': ("My message for unique")
}
username = forms.RegexField(
label="User name", max_length=30, regex=r"^[\w.@+-]+$",
error_messages={
'invalid': ("My message for invalid")
}
)
class Meta:
model = get_user_model()
fields = ['username', 'first_name', 'last_name', 'email']
def clean_username(self):
# Since User.username is unique, this check is redundant,
# but it sets a nicer error message than the ORM. See #13147.
username = self.cleaned_data["username"]
if self.instance.username == username:
return username
try:
User._default_manager.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(
self.error_messages['duplicate_username'],
code='duplicate_username',
)
請參閱clean_username
方法,該方法取自現有的 UserCreationForm
表單,我在其中添加了一個檢查以與當前用戶的用戶名進行比較。
目前,可以在表單級別覆蓋unique
錯誤消息:
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
error_messages = {
'my_unique_field': {
'unique': 'not a snowflake after all'
},
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.