1

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

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

4

1 回答 1

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
于 2011-02-06T14:04:46.623 回答