【问题标题】:Django unique=True except for blank valuesDjango unique=True 除了空白值
【发布时间】:2012-03-21 15:53:31
【问题描述】:

我有这个模型:

class Part(models.Model):
    serial_number = models.CharField(max_length=15, null=True, blank=True, validators=[validate_serial], unique=True)
    ....

serial_number 可以为空白和 null,因为所有部件不一定都有序列号。但是,在没有序列号的情况下存储一个零件后,空白不再是唯一的,我收到此错误:

具有此序列号的部件已经存在。

有解决办法吗?我已经看过this question,但我没有modelform。我要么使用管理员,要么直接在代码中进行。

【问题讨论】:

  • 如果您使用管理员,那么您可以定义自定义模型表单。我在你链接到的答案中展示了如何。如果您在代码中执行此操作,只需设置 part.serial_number=None 而不是使用 "" 作为空白值。

标签: python django


【解决方案1】:

我遇到了同样的问题,并通过在保存时为该字段指定 None 来修复它。

指定 default=None 也会有所帮助。

【讨论】:

    【解决方案2】:

    我很确定在唯一性约束中没有考虑空值。解决这个问题的方法是不使用 null,而是使用空字符串。所以,删除null=True

    【讨论】:

    • 是的,您可以在唯一列中包含多个 null。但是,OP 希望允许多个空值。因此它们必须允许 null,因为唯一性检查只允许一个空字符串。
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多