如何使用唯一但为空的字段在 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
可以注册,但是当他们注册时,他们最初只使用 username
、password
、确认密码以及 first_name
和 last_name
进行注册。我希望我有一个个人资料页面,允许更新 PetOwner
以包含他们的 phone_number
,但我不一定要将此作为一项要求。我决定将 phone_number
字段设置为 null=True
和 blank=True
,但是一旦我注册了第二个用户,我就会收到 django.db.utils.IntegrityError: UNIQUE constraint failed: app_petowner.phone_number
错误。我相信这是因为当我出于某种原因注册用户而不是 phone_number
时 None
即使我实际上根本没有添加 phone 数字,它也显示为空字符串。不知道为什么会这样,我也不知道如何解决。
我认为问题在于您实际上发送的是空字符串,而不是 null。在保存之前,您必须明确地将 phone 数字设置为 None。其实你可以检查它是否是真的。就让 if phone_number == "": print something
如何在 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
可以注册,但是当他们注册时,他们最初只使用 username
、password
、确认密码以及 first_name
和 last_name
进行注册。我希望我有一个个人资料页面,允许更新 PetOwner
以包含他们的 phone_number
,但我不一定要将此作为一项要求。我决定将 phone_number
字段设置为 null=True
和 blank=True
,但是一旦我注册了第二个用户,我就会收到 django.db.utils.IntegrityError: UNIQUE constraint failed: app_petowner.phone_number
错误。我相信这是因为当我出于某种原因注册用户而不是 phone_number
时 None
即使我实际上根本没有添加 phone 数字,它也显示为空字符串。不知道为什么会这样,我也不知道如何解决。
我认为问题在于您实际上发送的是空字符串,而不是 null。在保存之前,您必须明确地将 phone 数字设置为 None。其实你可以检查它是否是真的。就让 if phone_number == "": print something