Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Неверно считается количество символов для поля с типом textarea. [RSS Feed]

#1 Июнь 10, 2013 11:09:40

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Неверно считается количество символов для поля с типом textarea.

Привет.
В шаблоне есть textarea поле, описанное в форме следующим образом:

message = forms.CharField(label=u'Сообщение',
                              max_length=10,
                              widget=forms.Textarea)
Ввожу в textarea на странице следующий текст:
1
2
3
4
5
Делаю сабмит формы, выдаётся ошибка, что превышено допустимое количество символов в поле “message”.

Убедитесь, что это значение содержит не более 10 символов (сейчас 13).

Но почему их 13?
Символов должно быть 10 (5 знаков и 5 переводов строк).
Посмотрел в теге pre, что получается в значении этого поля:
        1
2
3
4
5
Почему Django сдвинуло значение “1”?
Как правильно посчитать количество символов в textarea?
Или это возможно только с помощью javascript?

Офлайн

#2 Июнь 10, 2013 15:37:21

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Неверно считается количество символов для поля с типом textarea.

Напишите валидацию длины поля ручками, с помощью метода clean_message, заодно и причину, может быть, найдёте.

Офлайн

#3 Июнь 11, 2013 10:38:21

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Неверно считается количество символов для поля с типом textarea.

lorien, спасибо за совет.
В textarea переход на новую строку это - “\r\n”.
Поэтому для обработки в Питоне, текст нужно нормализовать.
Превести все “\r\n” к “\n”.
Сделал так:

message = normalize_newlines(message)
num_words = len(message)
if num_words > 10:
    raise forms.ValidationError(u"Вы превысили лимит символов!")
Открыл для себя очень полезную встроенную функцию:
normalize_newlines (from django.utils.text import normalize_newlines).
Которая приводит двойные переводы, возврат каретки к нормальному виду - “\n”.

Отредактировано MikaMika (Июнь 11, 2013 10:40:13)

Офлайн

  • Начало
  • » Django
  • » Неверно считается количество символов для поля с типом textarea.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version