Django - 不同类型的用户配置文件

时间:2011-07-12 10:36:07

标签: django django-models django-users

我有一个Django应用程序,它允许不同类型的用户:公司,管理员,外部人员等。当然,所有这些都可以通过默认的身份验证系统和组轻松管理。

我的问题是属于不同群体的用户会有不同的相关信息 - 例如,公司需要提供一些对私人用户没有意义的商业信息。因此,我需要附加不同类型的配置文件,具体取决于组。 (在我的应用程序组中是互斥的。)

不幸的是,Django只允许将单个模型作为配置文件附加,并且该模型在settings.AUTH_PROFILE_MODULE中声明。在内部,由User.get_profile()方法检索,该方法基本上只读取此值并执行一些检查,例如模型实际存在。

我在考虑继承User并重写get_profile()方法,以便根据组返回不同的模型。

  

是否有更简单/更清晰的方式来管理不同类型的个人资料?

我提议的内容似乎有点破解,考虑到用户配置文件的引入完全是为了避免使用子类。

1 个答案:

答案 0 :(得分:16)

创建一个OneToOneFieldUserrelated_name的模型。

电子。 G:

class Firm(models.Model):
    user = models.OneToOneField(User, related_name='firm')
    # other fields

class External(models.Model):
    user = models.OneToOneField(User, related_name='external')
    # other fields

然后,您可以在userif hasattr(request.user, 'firm'))中检查此属性是否存在并返回正确的实例。我将它放在自定义中间件中,例如设置request.user_profile