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

时间:2018-11-30 05:36:40

标签: python django sqlite

我有一个这样的模型:

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()

但是我更喜欢在模型本身中包含这种逻辑。

1 个答案:

答案 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)