Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django-在执行最大长度表单验证时处理windows行结尾_Django_Validation_Line Endings - Fatal编程技术网

django-在执行最大长度表单验证时处理windows行结尾

django-在执行最大长度表单验证时处理windows行结尾,django,validation,line-endings,Django,Validation,Line Endings,因为windows行结尾实际上是两个字符(\r\n),所以max\u length将它们视为两个字符。我希望他们只被视为一个角色 处理这个问题的最佳方法是什么?我认为最好是转换行尾,但是在这个过程中我应该在哪里执行此操作?您将希望通过覆盖表单的clean方法或更通用的clean()方法来转换行尾。在清理数据之前,Django会将其转换为Python并对其进行验证,因此还需要将max_-length验证移到覆盖的clean方法中。还请注意,“此方法应返回已清理的数据,无论它是否更改了任何内容。”

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


处理这个问题的最佳方法是什么?我认为最好是转换行尾,但是在这个过程中我应该在哪里执行此操作?

您将希望通过覆盖表单的
clean方法或更通用的
clean()
方法来转换行尾。在清理数据之前,Django会将其转换为Python并对其进行验证,因此还需要将max_-length验证移到覆盖的clean方法中。还请注意,“此方法应返回已清理的数据,无论它是否更改了任何内容。”

在您的情况下,代码如下所示:

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

您将希望通过重写表单的
clean_389;()
方法或更通用的
clean()
方法来转换行尾。在清理数据之前,Django会将其转换为Python并对其进行验证,因此还需要将max_-length验证移到覆盖的clean方法中。还请注意,“此方法应返回已清理的数据,无论它是否更改了任何内容。”

在您的情况下,代码如下所示:

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

这太棒了,谢谢你!不过我有点挣扎。该字段被清除,但对原始数据进行验证。是否应在清除所有字段后运行
form.u是否有效()?或者我需要在其他东西上运行
is valid()
?问题是
clean()
是在验证了
max\u length
之类的东西之后运行的。这意味着您必须在
clean_()
中验证长度,并从字段中删除
max_length
。也许你可以更新你的答案?啊,是的,你说得对。我会更新答案,谢谢你指出这一点。我可以使用super保留所有其他验证器吗?如果是这样,我是否将数据放回
self.cleaned_data['some_field']
?这太棒了,谢谢!不过我有点挣扎。该字段被清除,但对原始数据进行验证。是否应在清除所有字段后运行
form.u是否有效()?或者我需要在其他东西上运行
is valid()
?问题是
clean()
是在验证了
max\u length
之类的东西之后运行的。这意味着您必须在
clean_()
中验证长度,并从字段中删除
max_length
。也许你可以更新你的答案?啊,是的,你说得对。我会更新答案,谢谢你指出这一点。我可以使用super保留所有其他验证器吗?如果是,我是否将数据放回
self.cleaned_data['some_field']