![](/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.