在我的Django应用中,我一直在使用OneToOneField
为用户模型添加额外的字段。但是,我觉得这种方式似乎不是无缝的,因为我必须通过user.profile.address
来使用额外的JOIN访问额外的字段,即使我可以使用select_related
来减少查询数量。>
users / models.py
from django.contrib.auth.models import User
from django.db import models
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phone_number = models.CharField(max_length=20)
address = models.CharField(max_length=50)
此外,我需要使用电子邮件代替用户名进行用户身份验证。在这方面,我觉得我应该通过执行以下操作来使用自定义用户模型。但是,我知道这种方式将与生产数据库中的现有用户模型产生冲突。
users / models.py
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
is_active = models.BooleanField(_('active'), default=True)
...
由于它已启动并正在运行数据库,所以我无法重新开始。在这一点上,有谁知道是否有一种方法来保留自定义用户模型并保留现有数据?