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

Posted

技术标签:

【中文标题】Django - 不同类型的用户配置文件【英文标题】:Django - User profiles of different types 【发布时间】:2011-10-03 12:28:32 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

使用OneToOneFieldUserrelated_name 创建一个模型。

E. 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

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

【讨论】:

这是最简单的方法。我现在的问题是保证这些配置文件实际上是由管理员填写的。 ***.com/questions/6681464/… 这个用户模型不是 Django 自带的默认东西,对吧?因为当我尝试这个时我得到NameError: name 'User' is not defined @JulioMarins 是的,你应该导入它:from django.contrib.auth.models import User

以上是关于Django - 不同类型的用户配置文件的主要内容,如果未能解决你的问题,请参考以下文章

Django配置用户上传文件夹和暴露后端文件夹资源

如何规范不同用户组具有不同类型配置文件的数据库?

在jetstream更新表单中更新用户配置文件时,将用户的不同类型数据保存在不同的表中

django 如果在多个app使用各自的用户多认证

Django - 在用户创建时创建用户配置文件

如何在管理界面中内联编辑 django 用户配置文件?