Windows の行末は実際には 2 文字 ( \r\n
) であるため、max_length はそれらを 2 文字として扱います。1キャラとして扱ってほしい。
これに対処する最善の方法は何ですか?行末を変換するのが最善だと思いますが、プロセスのどこでこれを行うのでしょうか?
Windows の行末は実際には 2 文字 ( \r\n
) であるため、max_length はそれらを 2 文字として扱います。1キャラとして扱ってほしい。
これに対処する最善の方法は何ですか?行末を変換するのが最善だと思いますが、プロセスのどこでこれを行うのでしょうか?
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