在一个项目中直接使用了自定义Django AdminSite作为后台管理网站。
在修改自定义User模型的信息后,点击保存按钮提交Form时,提示email字段不能为空。
这是因为我们的UserAdmin类继承自django.contrib.auth.admin.UserAdmin,在父类UserAdmin的form中将email字段定义为了required,即必填字段。
通过继承django.contrib.auth.forms.UserChangeForm类,并在init方法中对email字段属性进行修改,可以实现我们想要的效果。
这样在保存时就不会提示email字段不能为空了。
但是测试中发现,如果不填写email字段内容,保存后发现email字段的值变成了空字符串,而不是None,但是我们在自定义User模型中指定了email字段null=True,即我们期望的它应该是一个空值None。
经过调试后发现,在django.contrib.admin.options.ModelAdmin类的_changeform_view方法代码中,调用form.is_valid()方法后,email字段的值发生了变化。