Django:对request.user使用自定义类?

时间:2009-11-11 22:58:49

标签: django

我已经扩展了Django的默认用户类:

class CustomUser(User):
    friends = models.ManyToManyField('self', symmetrical=False)

但现在我想在任何地方使用它而不是默认的User类。在我的视图方法中,我可以访问request.user,但这是User类的实例。什么是使其返回CustomUser的最简单方法?

4 个答案:

答案 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它是。