django - 在进行max_length表单验证时处理windows行结尾

时间:2011-02-06 13:50:34

标签: django validation line-endings

因为窗口行结尾实际上是两个字符(\r\n),所以max_length将它们视为两个字符。我希望他们只被视为一个角色。

处理这个问题的最佳方法是什么?我认为最好转换行结尾,但在这个过程中我会这样做吗?

1 个答案:

答案 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