即使模型字段具有默认值,保存到django模型也会产生空错误

时间:2019-06-19 14:58:13

标签: django django-models

当通过具有键和值{...,'type': None,...}的字典保存到Django模型时

模型字段是 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

如果直接指定了None,django中的ORM是否不尝试使用默认值?应该如何最好地处理?

更新,有关保存的更多详细信息。

模型中没有自定义保存方法。

在视图中,这是通过

保存的

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 个答案:

答案 0 :(得分:2)

这段代码很奇怪。

发生问题是因为您显式设置了每个属性,即使该属性为None,也因此覆盖了实例化时分配的默认属性。您可以检查一下:

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

但是实际上我会重新考虑您在做什么,我不确定为什么您要在周围复制一堆字段,而不是例如将Address作为带有Account的外键的独立模型。 / p>