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

How can I allow empty fields in my ModelForm while still using unique = True?

目前在models.py我有

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

这确实令人惊讶,因为确保同一个值不会两次提交到数据库,但是否有一种方法可以使唯一值在重复值为空字符串时不会引发错误?unique是否采用例外论证?


本质上,你需要遵循这个答案中的建议。Django认为''等于''是为了唯一性,但不认为NULL等于NULL。所以需要存储NULL值,而不是空字符串。

  • 通过在模型中添加null = True,将字段更改为允许NULL

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

    1
    2
    3
    4
    5
    6
    7
    8
    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