Django ставит пустую строку по умолчанию, за исключением того, что она равна нулю в столбце БД - PullRequest
0 голосов
/ 18 декабря 2018

Я использую postgresql версию 10.6 с моим Django 2.1 приложением.Проблема в том, что когда я использую null=True в поле моей модели, он переводит в пустую строку ('') в столбце базы данных по умолчанию, где я пытаюсь использовать его по умолчанию как null.

В моем следующем примере кода image столбец должен быть null:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='profile_pics', null=True, blank=True) 

И я вызываю этот класс из signal следующим образом:

@receiver(post_save, sender=User)
def create_profile(sender, **kwargs):
    if kwargs.get('created') is True:
        Profile.objects.create(user=kwargs.get('instance'))

В этом снимке вы видите, что столбец image вставляется как пустая строка вместо null

enter image description here

Я также пытался использовать значение по умолчаниюдля моего поля модели:

image = models.ImageField(default=None, upload_to='profile_pics', null=True, blank=True)

, но оно тоже не работает.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Нуль: Это связано с базой данных.Определяет, будет ли данный столбец базы данных принимать нулевые значения или нет.

Пробел: Он связан с проверкой.Он будет использоваться во время проверки форм при вызове form.is_valid ().

Значения по умолчанию null и blank являются False.

Вы должны удалить blank=True

0 голосов
/ 18 декабря 2018
image = models.ImageField(upload_to='profile_pics', null=True) 

удалить blank=True

...