How can I allow empty fields in my ModelForm while still using unique = True?
django, django-forms, python
Solution
Essentially, you need to follow the advice in this answer. While Django considers `''` equal to `''` for purposes of uniqueness, it doesn't consider `NULL` equal to `NULL`. So you need to store `NULL` values instead of empty strings.
Change the field to allow `NULL`, by adding `null = True` in your model:
rowname = models.CharField(..., blank = True, null = True, unique = True)
Change empty strings to `None` in the form:
class ModelNameForm(forms.ModelForm):
class Meta:
model = ModelName
def clean_rowname(self):
return self.cleaned_data['rowname'] or None
class ModelNameAdmin(admin.ModelAdmin):
form = ModelNameForm
Problem
Currently in `models.py` I have ``` class ModelName(models.Model): rowname = models.CharField(max_length=100, blank = True, unique=True) ``` This does wonders as far as making sure the same value isn't submitted to the database twice but is there a way that I can have unique not raise an error when the value that is a duplicate is an empty string? Does `unique` take an exception argument?