14

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

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

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

我正在考虑子类化User和覆盖该get_profile()方法,以便它根据组返回不同的模型。

是否有更简单/更清洁的方法来管理不同类型的配置文件?

考虑到用户配置文件的引入正是为了避免对 User 进行子类化,我的提议似乎有点 hack。

4

1 回答 1

17

OneToOneField使用toUser和创建模型related_name

例如:

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

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

于 2011-07-12T11:00:53.833 回答