Модель Django для первичных и вторичных адресов электронной почты - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть модель Django, которая возвращает внешний ключ пользователю:

class Emails(models.Model):
    user = models.ForeignKey(CustomUser, unique=True)
    email1 = models.EmailField()
    email2 = models.EmailField()
    email3 = models.EmailField()

Однако у меня есть два вопроса:

  1. Мне нужен способпометить один как основной адрес электронной почты - возможно ли это с моделями Django?

  2. Перечисление 3 отдельных полей кажется неуклюжим - существует ли более рекомендуемый Django способ хранения нескольких похожих значений?

Примечание : я знаю, что есть несколько сторонних полей модели для достижения этой цели, я ищу нативный подход.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы должны немного изменить дизайн своей модели.Разработайте свою модель следующим образом:

class Email(models.Model):
    user = models.ForeignKey(CustomUser)
    email = models.EmailField()
    primary = models.BooleanField()

Это позволяет неограниченное количество электронных писем пользователей и возможность устанавливать различные параметры для одного письма.

Как только пользователь помечает один из своих адресов электронной почты как основной, вы можетепросто сначала измените поле primary для всех его писем на False, а затем запрашиваемое на True.

user_emails = Email.objects.filter(user=request.user).update(primary=False)
primary_email = Email.objects.get(pk=email_id, user=request.user)
primary_email.primary = True
primary_email.save()

Затем вам нужно решить, как обрабатывать адреса электронной почты от пользователя (или CustomUser) модель.Вы можете создать сигнал сохранения после записи для сохранения адресов электронной почты от модели пользователя до этой модели электронной почты.

0 голосов
/ 20 декабря 2018

Вы должны хранить только одно электронное письмо в одном объекте Emails и назвать его как UserEmails.Также добавьте поле, подобное is_primary в этой модели.Таким образом, для хранения нескольких электронных писем вы можете создать несколько объектов.Это будет масштабируемый дизайн на случай, если в будущем вам потребуется хранить более 3 электронных писем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...