Django has not considered NULL
to be equal to NULL
for the purpose of uniqueness checks since ticket #9039 was fixed, see:
http://code.djangoproject.com/ticket/9039
The issue here is that the normalized “blank” value for a form CharField
is an empty string, not None
. So if you leave the field blank, you get an empty string, not NULL
, stored in the DB. Empty strings are equal to empty strings for uniqueness checks, under both Django and database rules.
You can force the admin interface to store NULL
for an empty string by providing your own customized model form for Foo
with a clean_bar
method that turns the empty string into None
:
class FooForm(forms.ModelForm):
class Meta:
model = Foo
def clean_bar(self):
return self.cleaned_data['bar'] or None
class FooAdmin(admin.ModelAdmin):
form = FooForm