簡體   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