сохранение в django модель дает нулевую ошибку, даже если поле модели имеет значение по умолчанию - PullRequest
1 голос
/ 19 июня 2019

При сохранении в модель django через dict, который имеет ключ и значение {...,'type': None,...}

поле модели равно type = models.CharField(max_length=3, choices=Type.CHOICES, default=Type.EITHER)

Однако при попытке сохранить я получаю сообщение об ошибке: django.db.utils.IntegrityError: null value in column "type" violates not-null constraint

Разве ORM в django не пытается использовать значение по умолчанию, если None указано непосредственно?Как лучше всего это обрабатывать?

Обновление, более подробная информация о сохранении.

В модели нет настраиваемого метода сохранения.

В представлении это сохраняется с помощью

views.py

...
                account = Account()
                account_data = {}
                ...
                preferences = ['type', 'payment_method_preference', ...]
                account_fields = preferences + other_fields
                for key in account_fields:
                    account_data[key] = request.session['supply_address'].get(key)
                keys_to_attr(account_data, account)
                account.address = address
                account.payment = direct_debit
                account.save()

1 Ответ

2 голосов
/ 19 июня 2019

Этот код довольно странный.

Ваша проблема возникает из-за того, что вы явно устанавливаете каждый атрибут, даже если он равен None, поэтому переопределяете значение по умолчанию, которое было назначено при создании экземпляра.Вы можете проверить это:

for key in account_fields:
    value = request.session['supply_address'].get(key)
    if value is not None:
        account_data[key] = value

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...