Как получить поле из другой модели, связанной отношением OneToOne?
У меня есть основная модель User с полем 'email' (и другими полями). Но я создал еще одну модель Profile, в которую мне нужно передать email пользователя.
models.py для пользователя:
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(db_index=True, unique=True)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
objects = UserManager()
и для профиля:
class Profile(models.Model):
user = models.OneToOneField('authentication.User', on_delete=models.CASCADE)
phone_number = models.IntegerField(blank=True, unique=True)
is_subscribed = models.BooleanField(default=False)
email = ...
Task звучит довольно просто, но использование user.email кажется не работает так же хорошо, как user__email или свойство user.get_email. Что я должен написать вместо ... ?
если модель вам нравится
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(db_index=True, unique=True)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
objects = UserManager()
class Profile(models.Model):
user = models.OneToOneField('authentication.User', on_delete=models.CASCADE)
phone_number = models.IntegerField(blank=True, unique=True)
is_subscribed = models.BooleanField(default=False)
Вы можете использовать
$ profile = Profile.objects.get(id=1)
$ profile.user.email
А если так
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(db_index=True, unique=True)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
objects = UserManager()
class Profile(models.Model):
user = models.OneToOneField('authentication.User', on_delete=models.CASCADE)
phone_number = models.IntegerField(blank=True, unique=True)
is_subscribed = models.BooleanField(default=False)
email = models.EmailField(db_index=True, unique=True)
Вы можете использовать
$ profile = Profile.objects.get(id=1)
$ user = User.objects.get(id=1)
$ user = Test.objects.get(id=1)