如何允许Django管理后台将字段设置为NULL?
我把我的模型字段设置为 null=True
,这样在MySQL中就可以允许空值(NULL),但是我在Django后台似乎无法把这个字段设置为NULL。我还尝试设置 blank=True
,但这样只是把字段设置成了一个空字符串。按照 这个方法也没用,因为字段的值变成了“None”,而且是字符串类型。
有没有什么好主意?
6 个回答
12
通常,当你同时设置 null=True
和 blank=True
时,如果在管理后台把这个字段留空,Django
就会把它的值设为 NULL
。
编辑:
正如 agf
在他的回答中解释的,这种情况对所有类型都适用,除了 CharField
和 TextField
。
20
在这段文档中,听起来好像你不能通过管理后台把一个字符串类型的字段设置为NULL
,它会用空字符串来代替。这是Django的处理方式。对于其他类型的字段,这种设置是可以的。
所以,你要么得修改管理后台的脚本,要么就得考虑一下,数据库里其实不一定非要是NULL,空字符串也是可以接受的。
48
试着重写一下Model
里的save()
方法,这样可以检查一下有没有空值:
class MyModel(models.Model):
my_nullable_string = models.CharField(max_length=15, null=True, blank=True)
def save(self, *args, **kwargs):
if not self.my_nullable_string:
self.my_nullable_string = None
super(MyModel, self).save(*args, **kwargs)