3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
clean()為您的表單編寫一個(gè)方法。有關(guān)更多信息,請(qǐng)參見有關(guān)相互依賴的字段的清理和驗(yàn)證的Django文檔。
您的clean方法應(yīng)返回cleaned_data字典。在清洗的方法內(nèi)部,您無法實(shí)例化新的表單字段,但可以驗(yàn)證器。
from django.core.validators import validate_ipv46_address, RegexValidator
validate_hostname = RegexValidator(regex=r'[a-zA-Z0-9-_]*\.[a-zA-Z]{2,6}')
def clean(self):
cleaned_data = super(CacheCheck, self).clean()
record = cleaned_data.get("record")
hostname = cleaned_data.get(hostname, "")
if record == "PTR":
validate_ipv46_address(hostname)
elif record == "A":
validate_hostname(hostname)
# todo: check length of hostname as well
return cleaned_data
要回答您的其他問題,您的CacheCheck課程是的子類forms.Form。

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
這個(gè)邏輯會(huì)在表單或視圖中完成嗎?
兩個(gè)地方。在客戶端使用javascript進(jìn)行驗(yàn)證,以免造成愚蠢的錯(cuò)誤,導(dǎo)致服務(wù)器資源負(fù)擔(dān)沉重。然后在服務(wù)器端進(jìn)行驗(yàn)證,以避免在數(shù)據(jù)庫中包含錯(cuò)誤的數(shù)據(jù)。
傳遞給CacheCheck類的形式是混入還是子類化的形式?
這是子類化的一種形式。CacheCheck繼承Form。
添加回答
舉報(bào)