Django unique=True,空白值除外



我有这个型号:

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

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

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

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

我遇到了同样的问题,并通过在保存时为字段指定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=True

最新更新