因为窗口行结尾实际上是两个字符(\r\n
),所以max_length将它们视为两个字符。我希望他们只被视为一个角色。
处理这个问题的最佳方法是什么?我认为最好转换行结尾,但在这个过程中我会这样做吗?
答案 0 :(得分:4)
您需要通过覆盖表单的clean_<fieldname>()
方法或更一般的clean()
方法来转换行结尾。在清理数据之前,Django会将其转换为Python并对其进行验证,因此您还需要将max_length验证移动到重写的clean方法中。另请注意,“此方法应返回已清理的数据,无论其是否发生任何变化。”
http://docs.djangoproject.com/en/dev/ref/forms/validation/
在您的情况下,代码如下所示:
from django import forms
from string import replace
class YourForm(forms.Form):
some_field = forms.CharField()
# Your fields here
def clean_some_field(self):
max_length = 50
data = self.cleaned_data["some_field"]
data = replace(data, "\r", "")
if len(data) > max_length:
raise forms.ValidationError("some_field is too long!")
return data