如何在使用唯一 = True 的同时允许模型表单中的空字段



目前在models.py我有

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

这在确保相同的值不会两次提交到数据库方面确实很神奇,但是有没有一种方法可以让唯一值在重复值为空字符串时引发错误?unique接受例外参数吗?

从本质上讲,您需要遵循此答案中的建议。虽然 Django 认为''等同于'',但它并不认为NULL等于NULL。因此,您需要存储NULL值而不是空字符串。

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

    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
    

最新更新