当通过具有键和值{...,'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()
答案 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>