因为 windows 行尾实际上是两个字符 ( \r\n
),所以 max_length 将它们视为两个字符。我希望他们只被视为一个角色。
处理这个问题的最佳方法是什么?我认为最好转换行尾,但是在这个过程中我会在哪里做呢?
因为 windows 行尾实际上是两个字符 ( \r\n
),所以 max_length 将它们视为两个字符。我希望他们只被视为一个角色。
处理这个问题的最佳方法是什么?我认为最好转换行尾,但是在这个过程中我会在哪里做呢?
您需要通过覆盖表单的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