У меня есть эта простая модель:
class Profile(models.Model):
bio = models.CharField(max_length=300, blank=False)
location = models.CharField(max_length=50, blank=
edu = models.CharField(max_length=250, blank=True, null=False)
profession = models.CharField(max_length=50, blank=True)
profile_image = models.ImageField(
upload_to=upload_image, blank=True, null=False)
def __str__(self):
try:
return str(self.pk)
except:
return ""
и модель пользователя:
class User(AbstractBaseUser, UserTimeStamp):
first_name = models.CharField(max_length=50, blank=False, null=False)
email = models.EmailField(unique=True, blank=False, null=False)
profile = models.OneToOneField(Profile, on_delete=models.CASCADE)
uuid = models.UUIDField(
db_index=True,
default=uuid_lib.uuid4,
editable=False
)
is_admin = models.BooleanField(default=False, blank=False, null=False)
is_staff = models.BooleanField(default=False, blank=False, null=False)
is_active = models.BooleanField(default=True, blank=False, null=False)
objects = UserManager()
USERNAME_FIELD = "email"
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, perm_label):
return True
Как вы можете видеть в модели пользователя, у меня есть OneToOneField to Profile.
, но в модели профиля я не могу получить доступ к экземпляру пользователя, чтобы просто использовать его электронную почту в методе str .как то так:
def __str__(self):
return self.user.email
Как я могу это сделать?иногда эти отношения сбивают меня с толку.
ОБНОВЛЕНО
Да, self.user.email работает хорошо.но проблема в другом.У меня есть два типа пользователей.пользователи и учителя.и каждый из них имеет профиль поля в своей модели.поэтому, если я скажу:
def __str__(self):
return self.user.email
Он просто возвращает электронную почту пользовательских экземпляров.а учителя?