django - имеет дело с окончаниями строк windows при проверке формы max_length - PullRequest
1 голос
/ 06 февраля 2011

Поскольку конец строки в Windows на самом деле состоит из двух символов (\r\n), max_length обрабатывает их как два символа. Я хочу, чтобы к ним относились только как к одному персонажу.

Как лучше всего с этим справиться? Я предполагаю, что было бы лучше преобразовать окончания строки, но где в процессе я бы это сделал?

1 Ответ

4 голосов
/ 06 февраля 2011

Вы хотите преобразовать окончания строк, переопределив метод формы clean_<fieldname>() или более общий метод clean(). Перед очисткой данных Django преобразует их в Python и проверяет их, поэтому вам также необходимо переместить проверку max_length в переопределенный метод очистки. Также обратите внимание, что «этот метод должен возвращать очищенные данные независимо от того, изменил ли он что-либо или нет».

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
...