我有一个这样的模型:
class Test(models.Model)
name = models.CharField(max_length=30, default="Unassigned")
无论何时使用None
字段中的name
保存该模型的实例,我都希望改为使用"Unassigned"
保存该实例。但是如果我这样做:
>>> test = Test()
>>>test.name = None
>>>test.save()
当前将失败,并显示
django.db.utils.IntegrityError:NOT NULL约束失败: explorer_api_test.name
在最后一行,因为显然name
字段不允许为空(其中没有null=True
)。
但是,如果我允许使用空值,则不会使用默认的"Unassigned"
保存,而是使用None
保存。
我要在模型定义中更改 ,以便每当尝试在字段中使用None
保存其实例时,都使用默认字符串保存该实例吗?
在模型定义之外,我可以这样做:
>>>test = Test()
>>>test.name = None
>>>if test.name is None:
>>>...test.name = "Unassigned"
>>>test.save()
但是我更喜欢在模型本身中包含这种逻辑。
答案 0 :(得分:0)
您可以像这样覆盖save方法:
class Test(models.Model):
field = models.CharField(max_length=30, default="Unassigned", null=True)
def save(self, *args, **kwargs):
if self.field == None:
field_att = self.__class__._meta.get_field('field')
default_value = field_att.get_default()
self.field = default_value
return super(Test, self).save(*args, **kwargs)