Django - как установить пробел = False, обязательно = False - PullRequest
8 голосов
/ 01 июня 2011

У меня есть такая модель:

class Message(models.Model):
    msg = models.CharField(max_length = 150)

, и у меня есть форма для вставки поля.На самом деле django допускает пустые пробелы, например, если я вставляю в поле один пробел, это работает.Но теперь я хочу исправить это: поле не является обязательным, но если пользователь вставляет пробелы, проверка должна завершиться неудачей.

Я добавил:

class Message(models.Model):
    msg = models.CharField(max_length = 150, blank = False)

, но это нене работаетВ чем ошибка?

Ответы [ 2 ]

12 голосов
/ 01 июня 2011

Пробел не считается пустым . blank конкретно относится к без ввода (то есть пустая строка ''). Вам нужно будет использовать валидатор поля модели, который вызывает исключение, если значение состоит только из пробелов. Подробнее см. в документации .

Пример:

def validate_not_spaces(value):
    if isinstance(value, str) and value.strip() == '':
        raise ValidationError(u"You must provide more than just whitespace.")

class Message(models.Model):
    msg = models.CharField(max_length=150, blank=False,
                           validators=[validate_not_spaces])
1 голос
/ 01 июня 2011

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

import re

class MessageForm(form.ModelForm)
    def clean_msg(self):
        msg = self.cleaned_data['msg']
        if re.match('/[\s]+$',msg):
            raise ValidationError("Spaces not allowed")
        return msg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...