我有一个Django模型,该模型具有返回给用户的外键:
class Emails(models.Model):
user = models.ForeignKey(CustomUser, unique=True)
email1 = models.EmailField()
email2 = models.EmailField()
email3 = models.EmailField()
但是,我有两个问题:
我需要将一个标记为主要电子邮件地址的方法-Django模型可以做到这一点吗?
列出3个单独的字段似乎很笨拙-是否存在更多Django推荐的存储多个相似值的方法?
注意:我知道有一些第三方模型字段可以实现这一目标,我正在寻找一种本机方法。
答案 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)模型中的电子邮件地址。您可以创建一个后保存信号,以将电子邮件地址从“用户”模型存储到此“电子邮件”模型。