访问OnetoOneField关系模型

时间:2018-12-05 19:26:55

标签: python django django-models

我已经使用OnetoOneField(User)为用户建立了一个模型。我还添加了另一个称为键的字段。

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 :(得分:0)

AppUser对象将是您的User对象的属性

user.appuser.key

答案 1 :(得分:-1)

默认情况下,每个OneToOneFieldForeignKey字段都将通过其相关名称(在本例中为User)访问。

您没有在AppUser模型中为用户字段定义任何related_name字段,因此请按以下方式访问它:

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代码或任何其他地方,通过user来访问AppUser,如下所示:

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实例。

相关问题