В моем приложении Django я использовал OneToOneField
, чтобы иметь дополнительные поля для модели User.Но я чувствую, что этот способ не кажется бесшовным, поскольку мне нужно получить доступ к дополнительным полям с помощью дополнительного JOIN, выполнив команду user.profile.address
, хотя я могу минимизировать количество запросов с помощью 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)
...
Как естьи работает база данных, я не могу начать все сначала.В этом случае кто-нибудь знает, есть ли способ создать пользовательскую модель пользователя, сохраняя существующие данные?