Django:将OneToOneField更改为ForeignKey会导致';用户';对象没有属性';简介';
已尝试使用代理模型从Django:将OneToOneField更改为ForeignKey会导致';用户';对象没有属性';简介';,django,django-models,foreign-keys,one-to-one,Django,Django Models,Foreign Keys,One To One,已尝试使用代理模型从django authtools包访问User模型,但仍显示相同的错误。我承认我可能做错了,所以请随意提出任何建议,我会尝试的。谢谢 我使用的模型来自django authtools包 AUTH_USER_MODEL = 'authtools.User' 这是我的models.py class UserProfile(models.Model): # ... user = models.OneToOneField( settings.AUTH
django authtools
包访问User
模型,但仍显示相同的错误。我承认我可能做错了,所以请随意提出任何建议,我会尝试的。谢谢
我使用的模型来自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')
**这样,我以前的代码需要更改,因为我将无法自由调用旧的配置文件
属性,因为它将返回一个集合,而不是一个实例
相反,我想做如下事情:
user.profile = user.profiles.all().first()
这样我就不必用user.profile
更改所有行。但我不知道我在哪里可以宣布这一点,我迫切需要帮助,因为它正在成为一个主要的拦截器
有什么想法吗?非常感谢您提供的任何帮助。您可以在使用模型中定义属性方法
@property
def profile(self):
retrun self.profiles.first()
可以在使用模型中定义属性方法
@property
def profile(self):
retrun self.profiles.first()
如果模型不是由您定义的,您可以尝试monkey patch
from module import ClassToPatch
def get_profile(self):
retrun self.profiles.first()
ClassToPatch.profile = property(get_profile)
如果模型不是由您定义的,您可以尝试monkey patch
from module import ClassToPatch
def get_profile(self):
retrun self.profiles.first()
ClassToPatch.profile = property(get_profile)
我已经这样做了,甚至通过代理模型,但它不起作用。我无法直接访问用户模型,因为它来自django authtools包。如果你知道如何覆盖它,那么请分享你的方法。你可以尝试monkey patch方法,它应该可以工作。我已经这样做了,即使是通过代理模型,但它不工作。我无法直接访问用户模型,因为它来自django authtools包。如果你知道如何覆盖它,那么请分享你的方法。你可以尝试monkey patch方法,它应该可以工作。不幸的是,这不是我需要的。不幸的是,这不是我需要的。