首页 > 解决方案 > Django:将 OneToOneField 更改为 ForeignKey 最终以 'User' 对象没有属性 'profile'

问题描述

已经尝试使用代理模型Userdjango-authtools包中访问模型,但它仍然显示相同的错误。我承认我可能做错了,所以请随时提出任何建议,我会尝试的。谢谢!

我使用的模型来自django-authtools包装。

AUTH_USER_MODEL = 'authtools.User'

这是来自我的models.py

class UserProfile(models.Model):
    # ...
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL, related_name='profile')

我已经在这个项目上工作了很长一段时间,并使用了以下多行**:

user.profile
user.profile.name
user.profile.playlists
# and many others

现在对于我的用例,我意识到一次登录需要多个配置文件,所以我打算从OneToOneFieldForeignKey

class UserProfile(models.Model):
    # ...
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL, related_name='profiles')

** 有了这个,我以前的代码需要更改,因为我将无法profile自由调用旧属性,因为它将返回一个集合,而不是单个实例。

相反,我想做如下的事情:

user.profile = user.profiles.all().first()

这样我就不必用user.profile. 但我不知道在哪里可以宣布这一点,我非常需要帮助,因为它正在变成一个主要的障碍。

有任何想法吗?任何形式的帮助将不胜感激。

标签: djangodjango-modelsforeign-keysone-to-one

解决方案


您可以在使用模型中定义属性方法。

@property
def profile(self):
    retrun self.profiles.first() 

推荐阅读