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