Подтвердить что ты не робот

Как вы можете создать непустой CharField в Django?

У меня есть простая модель, которая выглядит так:

class Group(models.Model):
    name = models.CharField(max_length = 100, blank=False)

Я ожидаю, что это вызовет ошибку целостности, но это не так:

group = Group() # name is an empty string here
group.save()

Как я могу убедиться, что для переменной имени установлено что-то не пустое? I. Чтобы сделать базу данных отвергнутой попытками сохранить пустую строку?

4b9b3361

Ответ 1

В Django docs в этом случае ваш name будет сохранен как пустая строка, потому что опция поля null по умолчанию False. если вы хотите определить настраиваемое значение по умолчанию, используйте опцию default.

name = models.CharField(max_length=100, blank=False, default='somevalue')

На этой странице вы можете видеть, что blank не связан с базой данных.

Update:

Вы должны переопределить чистую функцию вашей модели, чтобы иметь специальную проверку, поэтому ваша модель def будет:

class Group(models.Model):
  name = models.CharField(max_length=100, blank=False)
  def clean(self):
    from django.core.exceptions import ValidationError
    if self.name == '':
        raise ValidationError('Empty error message')

Или вы можете заменить ValidationError на что-то другое. Затем, прежде чем вы вызовете group.save() вызов group.full_clean(), который вызовет clean()

Другие связанные с проверкой вещи здесь.

Ответ 2

Или вы можете просто использовать MinLengthValidator с минимумом 1- char:

from django.core.validators import MinLengthValidator

class Company(BaseModel):
    """Company"""

    name = models.CharField(max_length=255,
                            validators=[MinLengthValidator(1)])

Ответ 3

Система проверки Djangos предполагает, что все поля требуются, если вы не укажете, что его ok оставить его пустым.

Зарегистрировали ли вы класс в Admin? он показывает ошибки, когда вы оставляете его пустым?

Django krishna

Ответ 4

другой вариант, который не требует вызова вручную clean, заключается в использовании этого:

name = models.CharField(max_length=100, blank=False, default=None)
  • blank предотвратит предоставление пустой строки в вашей модели
  • default=None будет устанавливать имя None при использовании чего-то вроде group = Group(), тем самым создавая исключение при вызове save