Как вы можете создать непустой 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. Чтобы сделать базу данных отвергнутой попытками сохранить пустую строку?
Ответы
Ответ 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