![](/img/trans.png)
[英]Django: 'unique_together' and 'blank=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.