django - Django:将 OneToOneField 更改为 ForeignKey 最终以 'User' 对象没有属性 'profile'
问题描述
已经尝试使用代理模型User
从django-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
现在对于我的用例,我意识到一次登录需要多个配置文件,所以我打算从OneToOneField
到ForeignKey
class UserProfile(models.Model):
# ...
user = models.ForeignKey(
settings.AUTH_USER_MODEL, related_name='profiles')
** 有了这个,我以前的代码需要更改,因为我将无法profile
自由调用旧属性,因为它将返回一个集合,而不是单个实例。
相反,我想做如下的事情:
user.profile = user.profiles.all().first()
这样我就不必用user.profile
. 但我不知道在哪里可以宣布这一点,我非常需要帮助,因为它正在变成一个主要的障碍。
有任何想法吗?任何形式的帮助将不胜感激。
解决方案
您可以在使用模型中定义属性方法。
@property
def profile(self):
retrun self.profiles.first()
推荐阅读
- php - 从 id 来的地方重定向同一个页面
- ios - 当另一个视图出现在根视图上时,警报视图中心会发生变化
- vba - 将值从一个用户窗体移动到另一个(变量)用户窗体
- r - 运行托管在私有 bitbucket 上的闪亮应用程序
- sap - HANA XSA 中 Fiori 启动板中的动态磁贴。如何?
- c# - 通用 Windows 平台 C# 无法使用设计器进行编辑
- python - 基于另一列 str Python 的条件字符串拆分
- java - FileInputStream 没有缓冲,为什么 BufferedInputStream 更快?
- node.js - escape 或 unescape 不适用于特定的 unicode 字符串 - Node Js
- java - 发送邮件时丢失格式