[英]Why form._errors is working in generic.UpdateView but not in generic.CreateView?
當我在我的 mixin 中使用它時
form._errors[forms.forms.NON_FIELD_ERRORS]=ErrorList(["age must be positive"])
在我的 UpdateView 中它可以工作,並且消息以紅色彈出。 但是在我的 CreateView 中沒有任何東西彈出
我怎樣才能做到這一點? 這是我的mixin.py :
class AgePositiveMixin(object):
def form_valid(self, form):
print(form.instance.age)
if form.instance.age>0:
return super(AgePositiveMixin, self).form_valid(form)
else:
form._errors[forms.forms.NON_FIELD_ERRORS]=ErrorList(["Age must be positive"])
# raise forms.ValidationError('Age must be positive')
return self.form_invalid(form)
CreateView
沒有instance
因為在構造表單時對象還不存在。 您可以這樣做,而不是form.instance
:
instance = form.save(commit=False)
# perform validation here
instance.save()
return super(AgePositiveMixin, self).form_valid(form)
年齡是否應該到處都是正數(在 Django 管理員中,面向用戶的表單中)? 如果是這樣, PositiveSmallIntegerField
將為您進行驗證。
一般來說,我喜歡將驗證盡可能地靠近數據庫。 如果PositiveSmallIntegerField
不適合您的用例,我建議使用validator 。 使用驗證器,Django 將在管理、模型表單和其他任何地方為您執行驗證。 這對一致性非常有用。
編輯:執行驗證的另一種方法是在表單類中進行:
class UserForm(forms.ModelForm):
class Meta:
model = User
def clean_age(self):
age = self.cleaned_data['age']
if not age > 0:
raise forms.ValidationError("Age must be positive")
return age
查看 Django 的表單和字段驗證文檔以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.