Доступ к модели отношений OnetoOneField - PullRequest
0 голосов
/ 05 декабря 2018

Я построил модель для пользователя, используя OnetoOneField (Пользователь).Я также добавил еще одно поле под названием ключи.

class AppUser(models.Model):
    user = models.OneToOneField(User)
    key = models.CharField(max_length= 32, default="")

def __str__(self):
    return self.user.username

Теперь после входа в систему с использованием определенного имени пользователя, как мне получить доступ к атрибуту ключа для этого имени пользователя в файле views.py?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

по умолчанию каждое поле OneToOneField или ForeignKey будет доступно через связанное с ним имя (в данном случае пользователь).

Вы не определили ни одного поля related_name в своей модели AppUser для поля пользователяПолучите доступ к нему, как показано ниже:

user.appuser_set.key

Как вы заметили, это будет нижний регистр имени класса плюс _.

Или вы можете добавить его вручную следующим образом:

class AppUser(models.Model):
    user = models.OneToOneField(User, related_name='app_user')
    key = models.CharField(max_length= 32, default="")

    def __str__(self):
        return self.user.username

и в ваших кодах views.py или в любом другом месте доступ к AppUser осуществляется с user, например:

user.app_user      # This will get app_user connected to user instance
user.app_user.key  # this will get proper key value for that appUser of User

Обновление: Также обратите внимание, что до тех пор, пока выне создавал и экземпляр AppUser для каждого пользователя, выполнение user.app_user вызовет ошибку.

Для таких ситуаций я обычно создаю сигнал, который будет срабатывать на post_save пользователя.Это означает, что сразу после создания пользователя для этого пользователя будет создан новый экземпляр AppUser.

0 голосов
/ 05 декабря 2018

Объект AppUser будет атрибутом вашего User объекта

user.appuser.key
...