【问题标题】:How can I allow empty fields in my ModelForm while still using unique = True?如何在仍然使用 unique = True 的同时允许 ModelForm 中的空字段?
【发布时间】:2012-04-26 22:11:42
【问题描述】:

目前在models.py我有

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

就确保相同的值不会两次提交到数据库而言,这确实很奇怪,但是当重复的值是空字符串时,有没有一种方法可以使我具有唯一性而不引发错误? unique 是否接受异常参数?

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    基本上,您需要遵循this answer 中的建议。虽然出于唯一性的目的 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
      

    【讨论】:

    • 这个答案正是我一直在寻找的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 2012-11-29
    • 2013-06-10
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多