【问题标题】:What's the best way to have different profiles for different kinds of users in django?在 django 中为不同类型的用户提供不同配置文件的最佳方式是什么?
【发布时间】:2010-10-15 06:38:57
【问题描述】:

在我的申请中,我有学生、教授和工作人员。工作人员不需要个人资料,但教授和学生都需要不同的个人资料。我宁愿不自己实现它(中间件和诸如此类),所以无论如何只有 get_profile() 根据用户的角色返回不同的配置文件?

【问题讨论】:

    标签: django django-profiles


    【解决方案1】:

    你有http://docs.djangoproject.com/en/dev/topics/auth/#auth-profiles吗?

    这是标准解决方案。

    【讨论】:

    • 我已经读过了。我需要的是为不同类型的用户提供不同类型的配置文件,该解决方案只会为所有用户提供一种配置文件。
    • 请以“不同类型的配置文件”为例更新您的问题。通常,我们定义具有多个字段的配置文件,其中一些是可选的。你在说什么?
    【解决方案2】:

    使用目前处于测试阶段的 Django 1.1,我将实现 proxy model

    class MyUser(User):
    
      class Meta:
        proxy = True
    
      def get_profile(self):
        if self.role == 'professor':
          return ProfessorProfile._default_manager.get(user_id__exakt=self.id)
        elif self.role == 'student':
          return StudentProfile._default_manager.get(user_id__exakt=self.id)
        else:
          # staff
          return None
    

    get_profile 需要原始的缓存代码等等。但基本上你可以做类似的事情。

    使用 Django 1.0.x,您可以实现基于 User 的派生类,但这可能会破坏其他地方的代码。对于这样的东西,我喜欢代理类,它只是添加 python 功能而不更改数据库模型。

    【讨论】:

    • 这些看起来很有用,但这仍然带来了与我自己使用多种用户/配置文件类型时完全相同的问题:现有应用程序不知道它。他们只是创建用户实例,所以这个很好的方法完全被忽略了。
    • 是的,多用户模型还是有点问题的,但是可以解决基于角色的不同profile。
    猜你喜欢
    • 2017-04-11
    • 2011-10-03
    • 2011-11-25
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2021-10-04
    • 2016-08-03
    相关资源
    最近更新 更多