簡體   English   中英

為什么 form._errors 在 generic.UpdateView 中工作而不在 generic.CreateView 中工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM