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方法,它应该可以工作。不幸的是,这不是我需要的。不幸的是,这不是我需要的。