繁体   English   中英

Django unique=True 除了空白值

[英]Django unique=True except for blank values

我有这个 model:

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

serial_number 可以为空和 null,因为所有部件不一定都有序列号。 然而,在存储一个没有序列号的零件后,空白不再是唯一的,我得到这个错误:

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

有解决方法吗? 我已经看过这个问题,但我没有模型。 我要么使用管理员,要么直接在代码中执行。

我遇到了相同的问题,并通过在保存时为字段指定None来解决此问题。

指定default=None也会有帮助。

Django 支持创建具有条件的唯一约束。 可以创建自定义约束,仅在字段值不为空的情况下强制给定字段的唯一性。

from django.db.models import Q

serialnumber_is_not_blank = ~Q(serial_number="")

class Meta:
   constraints = [
        models.UniqueConstraint(
            fields=["serial_number"],
            condition=serialnumber_is_not_blank,
            name="unique_serial_number",
        )
    ]

我很确定唯一性约束不会考虑使用null值。 解决此问题的方法是不使用null,而使用空字符串。 因此,删除null=True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM