为什么表单._错误在generic.UpdateView中工作,但在generic.CreateView中不工作?

2024-06-28 20:14:21 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在混音器中使用它时

form._errors[forms.forms.NON_FIELD_ERRORS]=ErrorList(["age must be positive"])

在我的UpdateView中,它工作正常,消息以红色弹出。但在我看来,什么都没有出现

我怎样才能做到这一点? 这是我的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)

Tags: instanceselfformfieldageformsbenon
1条回答
网友
1楼 · 发布于 2024-06-28 20:14:21

一个CreateView没有一个instance,因为在构造表单时对象还不存在。您可以执行以下操作,而不是form.instance

instance = form.save(commit=False)
# perform validation here
instance.save()
return super(AgePositiveMixin, self).form_valid(form)

年龄是否应该在任何地方都是积极的(在Django管理中,面向用户的表单中)?如果是这样,一个^{}将为您进行验证

一般来说,我喜欢让验证尽可能靠近数据库。如果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的Form and field validation文档,以了解有关这方面的更多信息

相关问题 更多 >