每当 null 被强制进入模型的字段时,请转到默认字符串



我有一个这样的模型:

class Test(models.Model)
name = models.CharField(max_length=30, default="Unassigned")

每当在name字段中使用None保存该模型的实例时,我都希望使用"Unassigned"保存该实例。但如果我这样做:

>>> test = Test()
>>>test.name = None
>>>test.save()

目前将失败

django.db.utils.IntegrityError:NOT NULL约束失败:explorer_api_test.name

,因为显然name字段不允许为null(其中没有null=True(。

但是如果我允许null,它将不会用默认的"Unassigned"保存,而是用None保存。

我该如何更改模型定义中的,以便每当它的实例试图用字段中的None保存时,它都用默认字符串保存?在模型定义之外,我可以这样做:

>>>test = Test()
>>>test.name = None
>>>if test.name is None:
>>>...test.name = "Unassigned"
>>>test.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)

最新更新