我已经扩展了Django的默认用户类:
class CustomUser(User):
friends = models.ManyToManyField('self', symmetrical=False)
但现在我想在任何地方使用它而不是默认的User
类。在我的视图方法中,我可以访问request.user
,但这是User
类的实例。什么是使其返回CustomUser
的最简单方法?
答案 0 :(得分:6)
你也可以在models.py中的某个地方“修补”现有的用户模型,它应该可以正常工作。在您的代码中,只需继续使用原始类。
User.add_to_class('friends',models.ManyToManyField('self', symmetrical=False))
答案 1 :(得分:5)
我不确定您是否可以完全执行此操作,但您可以使用Django user_profile功能访问您的CustomUser属性。
在你的settings.py中:
AUTH_PROFILE_MODULE = 'myapp.CustomUser'
在您看来:
user_friends = user.get_profile().friends
查看此link了解详情。
答案 2 :(得分:3)
所有解释都是here。 request.user问题通过使用身份验证后端解决。我根据作者的指示实现了一个自定义用户,从那以后一直很开心。
答案 3 :(得分:1)
我认为解决问题的最快方法就是调用CustomUser.objects.get(user=user)
(假设用户是CustomUser模型中的一个属性。我要做的是以下内容:
class CustomUser(models.Model):
user = models.ForeignKey(User, unique=True)
因此,当您获得CustomUsers的查询集时,您可以根据请求中的用户过滤器过滤掉所需的查询集。
否则你可以修改中间件以包含CustomUsers而不是用户,但我不确定如何做到这一点;)
编辑:Mark向我提到他宁愿使用继承,这样他就可以使用User的所有自定义方法,这是有道理的,所以我找到了一篇文章来很好地解决这个问题。Here它是。