Django Forms:如果我在表单中使用 charfield,是不是需要使用 clean_field?

Posted

技术标签:

【中文标题】Django Forms:如果我在表单中使用 charfield,是不是需要使用 clean_field?【英文标题】:Django Forms: If I use charfield in form, do I need to use clean_field?Django Forms:如果我在表单中使用 charfield,是否需要使用 clean_field? 【发布时间】:2018-10-21 08:50:29 【问题描述】:

在我的表单中,如果我有以下类,其中包含我的 charfield 'bio' 字段

class MyClass(forms.ModelForm):
    bio = forms.CharField(max_length=1000

我是否需要进行以下验证,或者上面的 max_length=1000 是否已经涵盖了这一点?

def clean_bio(self):
    bio=self.cleaned_data['bio']
    max_length = 1000
    if len(bio) > max_length:
        raise forms.ValidationError('Please limit your bio to 1000 words')
return bio

【问题讨论】:

不,框架会为你做长度限制。 【参考方案1】:

length 完全没有必要使用它,你的模型字段已经有一个max_length,所以 Django 会确保这个值少于 1000 个字符。

注意:建议您在模型中使用models.TextField(),因为您的字段可以接收很长的字符。您的表格将是:

forms.CharField(max_length=1000,widget=forms.Textarea())

【讨论】:

TextField 做了什么而 CharField 没有?如果它更长,它会提供错误验证吗? Nm,我发现了这个:***.com/questions/7354588/… 如果你也在模型中使用它,我只是警告你不要将它用于此类领域。即使在形式上,通过使用forms.CharField,您必须使用小部件forms.Textarea(),请参阅我的更新答案

以上是关于Django Forms:如果我在表单中使用 charfield,是不是需要使用 clean_field?的主要内容,如果未能解决你的问题,请参考以下文章

Django表单,表单字段的继承和顺序

页面未在 django 中保存表单数据

在 Django 表单中动态显示和隐藏字段

django 将view视图中的对象传入forms表单验证模块中

Django 表单无效

更改在Django中使用ModelForm创建的表单元素的宽度