如何允许Django管理后台将字段设置为NULL?

59 投票
6 回答
31944 浏览
提问于 2025-04-16 23:11

我把我的模型字段设置为 null=True,这样在MySQL中就可以允许空值(NULL),但是我在Django后台似乎无法把这个字段设置为NULL。我还尝试设置 blank=True,但这样只是把字段设置成了一个空字符串。按照 这个方法也没用,因为字段的值变成了“None”,而且是字符串类型。

有没有什么好主意?

6 个回答

12

通常,当你同时设置 null=Trueblank=True 时,如果在管理后台把这个字段留空,Django 就会把它的值设为 NULL

编辑:

正如 agf 在他的回答中解释的,这种情况对所有类型都适用,除了 CharFieldTextField

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)

撰写回答