Python 访问OnetoOneField关系模型

Python 访问OnetoOneField关系模型,python,django,django-models,Python,Django,Django Models,我使用OnetoOneField(用户)为用户构建了一个模型。我还添加了另一个名为keys的字段 class AppUser(models.Model): user = models.OneToOneField(User) key = models.CharField(max_length= 32, default="") def __str__(self): return self.user.username 现在,在使用特定用户名登录后,如何在views.py文件

我使用OnetoOneField(用户)为用户构建了一个模型。我还添加了另一个名为keys的字段

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

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

现在,在使用特定用户名登录后,如何在views.py文件中访问该用户名的key属性?

AppUser对象将是
User
对象的属性

user.appuser.key

默认情况下,每个
OneToOneField
ForeignKey
字段将通过其相关名称(在本例中为用户)进行访问

您没有在AppUser模型中为user字段定义任何相关的_name字段,因此请按如下方式访问它:

user.appuser_set.key
正如您所注意到的,它将是类名加上389;的小写字母

或者,您可以手动将其添加到中,如下所示:

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
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
在您的views.py code或任何其他位置,从
user
访问AppUser,如下所示:

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
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\u user
将引发错误


对于这种情况,我通常创建一个信号,该信号将在用户的
post\u save
时触发。这意味着在创建用户之后,将立即为该用户创建一个新的AppUser实例。

您对“key属性”的含义是什么?AppUser模型中的“key”我遇到了这个错误:在尝试user.AppUser之后,没有定义名称“user”。key
AppUser
应该是小写的(即
AppUser
)如回答中所述。@Nobi22从哪里获得
用户名
?将此变量而不是
user
。应该有一个
User
model的对象。当使用User.appuser\u set:error=名称'User'未定义,当使用request.User.appuser\u set:error='User'对象没有属性'appuser\u set'
makemigrations
migrate
应用时?对不起,我有点困惑,我在哪里添加“User.appuser\u set.key”这个?看来你没有运行这些命令
python manage.py makemigrations
python manage.py migrate
。不,我一创建模型就这样做了。我运行了这两个命令