我在我的應用程序中定義了一個模型表單,在我的一個表單域中,我希望用戶輸入他們的輸入,但輸入的第一個字母在首都。如果情況並非如此,應用程序應該拋出錯誤並提示用戶重新輸入特定的表單條目。Django:表單驗證接受第一個字母在CAPS中的字符串
是否有一個內置的Django表單驗證器來實現這樣的限制?
PS:我知道ModelForm
提供的capitalize()
方法,它將表單字段存儲在數據庫中,首字母大寫。但是,這對我來說不起作用,因爲我想驗證表單提交前的輸入。
我在我的應用程序中定義了一個模型表單,在我的一個表單域中,我希望用戶輸入他們的輸入,但輸入的第一個字母在首都。如果情況並非如此,應用程序應該拋出錯誤並提示用戶重新輸入特定的表單條目。Django:表單驗證接受第一個字母在CAPS中的字符串
是否有一個內置的Django表單驗證器來實現這樣的限制?
PS:我知道ModelForm
提供的capitalize()
方法,它將表單字段存儲在數據庫中,首字母大寫。但是,這對我來說不起作用,因爲我想驗證表單提交前的輸入。
from django.db import models
from django.core.exceptions import ValidationError
def validate_capitalized(value):
if value != value.capitalize():
raise ValidationError('Invalid (not capitalized) value: %(value)s',
code='invalid',
params={'value': value})
class MyModel(models.Model):
name = models.CharField(max_length=50, validators=[validate_capitalized])
您可以根據需要自定義ValidationError。 Docs:validators,ValidationError。
您可以在窗體或模型字段中使用驗證器,請參閱文檔:Using validators和Writing validators。
引用一個簡單的可調用來執行檢查並引發異常。
爲什麼不直接用'capitalize()'修復它? [EAFP](https://docs.python.org/2/glossary.html#term-eafp)? – IanAuld
@IanAuld我已經在我的OP中提到過這個。我希望用戶自己在表單域中輸入正確的輸入。如果沒有別的,'capitalize()'會起作用。但是,我想知道是否有另一種方法在我的表單中實現這個約束。 –
然後使用jQuery /客戶端驗證。而且,值得你說的是,你不想這麼做,並不是爲什麼你不想這麼做,這是一個非常重要的差異。 – IanAuld