У меня есть модель с несколькими Charfield, установленными как blank = True, а не null в соответствии с рекомендациями по двум советам (см. Раздел 6.2.4).Ошибки Charfield null
class Supplier(models.Model):
unique_id = models.IntegerField(unique=True)
name = models.CharField(max_length=255, unique=True)
supplier_name = models.CharField(max_length=255, blank=True)
Однако, когда я пытаюсь сохранить запись модель, которая не имеет None в поле Имя поставщика, я получаю сообщение об ошибке: django.db.utils.IntegrityError: нулевое значение в колонке «Имя поставщика» нарушает не-нулевое ограничение , Каков наилучший подход к решению этой проблемы? Должен ли я просто использовать null = True в объявлении поля или преобразовать None в пустую строку (не идеально)? Или другой подход?
Как вы создаете экземпляр «Поставщик»? Если вы не укажете имя поставщика, например. 'Supplier.objects.create (unique_id = 1, name = 'example')', тогда я ожидал бы, что 'имя_процессора' будет сохранено как пустая строка. Однако, если вы явно задали 'поставщик_имя = нет', например. 'Supplier.objects.create (unique_id = 2, name = 'example2', supplier_name = None)', тогда Django попытается сохранить значение null, и вы получите 'IntegrityError'. Обратите внимание, что параметр 'blank = True' влияет на формы администратора и модели Django - он не влияет на базовую схему базы данных или автоматически преобразует' None' в '' ''. – Alasdair
спасибо, что проблема. Я думал, что django автоматически конвертирует None в '', и я пытался сэкономить с 'поставщиком_name = None' – Yunti
Рад, что это помогло, я добавил комментарий в качестве ответа. – Alasdair