如何在仍然使用unique = True的情况下允许我的ModelForm中的空字段?

时间:2012-04-15 04:44:27

标签: python django django-forms

目前在models.py我有

class ModelName(models.Model):
    rowname = models.CharField(max_length=100, blank = True, unique=True) 

这确实可以确保相同的值没有提交到数据库两次,但有一种方法,当重复的值是空字符串时,我可以独特地不引发错误吗? unique是否会接受异常参数?

1 个答案:

答案 0 :(得分:5)

基本上,您需要遵循this answer中的建议。虽然Django认为''等于''以达到唯一性,但它并不认为NULL等于NULL。因此,您需要存储NULL值而不是空字符串。

  1. 通过在模型中添加NULL来更改字段以允许null = True

    rowname = models.CharField(..., blank = True, null = True, unique = True) 
    
  2. 将空字符串更改为None格式:

    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