1

Windows の行末は実際には 2 文字 ( \r\n) であるため、max_length はそれらを 2 文字として扱います。1キャラとして扱ってほしい。

これに対処する最善の方法は何ですか?行末を変換するのが最善だと思いますが、プロセスのどこでこれを行うのでしょうか?

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 に答える