如何使用唯一但为空的字段在 Django 中保存模型

How to save model in Django with unique but null fields

如何在 Django 中保存一个应该唯一但又允许为空的模型。例如我有以下模型...

class PetOwner(models.Model):
    """Model representing a pet owner."""

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=50, help_text="Enter owner's first name")
    last_name = models.CharField(max_length=50, help_text="Enter owner's last name")
    email = models.EmailField(
        max_length=50, blank=True, unique=True, help_text="Enter owner's email"
    )
    phone_number = models.CharField(
        max_length=15, blank=True, unique=True, help_text="Enter owner's phone number"
    )
    address = models.ForeignKey(
        "Address", on_delete=models.SET_NULL, null=True, blank=True
    )

我希望我的应用按以下方式运行。 PetOwner 可以注册,但是当他们注册时,他们最初只使用 usernamepassword、确认密码以及 first_namelast_name 进行注册。我希望我有一个个人资料页面,允许更新 PetOwner 以包含他们的 phone_number,但我不一定要将此作为一项要求。我决定将 phone_number 字段设置为 null=Trueblank=True,但是一旦我注册了第二个用户,我就会收到 django.db.utils.IntegrityError: UNIQUE constraint failed: app_petowner.phone_number 错误。我相信这是因为当我出于某种原因注册用户而不是 phone_numberNone 即使我实际上根本没有添加 phone 数字,它也显示为空字符串。不知道为什么会这样,我也不知道如何解决。

我认为问题在于您实际上发送的是空字符串,而不是 null。在保存之前,您必须明确地将 phone 数字设置为 None。其实你可以检查它是否是真的。就让 if phone_number == "": print something