Как сохранить модель в Django с уникальными, но нулевыми полями
Как я могу сохранить модель, которая должна быть уникальной, но при этом допускается null в 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
, даже если я вообще не добавлял номер телефона, он отображается как пустая строка. Не уверен, почему это происходит, и не уверен, как это исправить.
Я думаю, что проблема в том, что вы на самом деле отправляете пустую строку, а не null. Вы должны явно установить номер телефона в None перед сохранением. На самом деле вы можете проверить, является ли это истиной. Просто сделайте так: if phone_number == "": print something