自从票务#9039被修复以来,Django就唯一性检查的目的没有将NULL视为NULL,请参阅:
http://pre.djangoproject.com/ticket/9039
这里的问题是,表单CharField的规范化“空白”值是一个空字符串,而不是无。因此,如果将该字段保留为空白,则会得到一个空字符串,而不是NULL,存储在数据库中。在Django和数据库规则下,空字符串等于用于唯一性检查的空字符串。
你可以通过使用clean_bar方法为Foo提供自己的自定义模型表单,从而将空字符串转换为None,从而强制管理界面为空字符串存储NULL:
class FooForm(forms.ModelForm): class meta: model = Foo def clean_bar(self): return self.cleaned_data['bar'] or Noneclass FooAdmin(admin.ModelAdmin): form = FooForm



