主要和次要电子邮件地址的Django模型

时间:2018-12-20 16:10:54

标签: django model

我有一个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 :(得分:0)

您应仅在Emails的一个对象中存储一封电子邮件,并将其命名为UserEmails。另外,在此模型中添加诸如is_primary之类的字段。因此,要存储多个电子邮件,可以创建多个对象。如果将来您需要存储3个以上的电子邮件,这将是一种可扩展的设计。

答案 1 :(得分:0)

您必须重新设计模型。样式如下:

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()

然后,您需要确定如何处理User(或CustomUser)模型中的电子邮件地址。您可以创建一个后保存信号,以将电子邮件地址从“用户”模型存储到此“电子邮件”模型。