【问题标题】:What is better way to have multiple type of member profiles in django在 django 中拥有多种类型的成员配置文件的更好方法是什么
【发布时间】:2012-04-14 11:43:08
【问题描述】:

我在 stackoverflow.com 上看到另一个问题,其标题似乎相似,但不能满足我的要求,而且我的用户非常不同,因此只有不同的角色可能无法正常工作。我有一个工作门户场景,其中一种用户是具有不同属性和不同功能的公司,而另一种是可以显示他的个人资料和简历等的候选人,他们将有不同的 URL。所以他们完全不同,但共同点是他们都是注册用户。他们将使用登录表单,他们将更改密码,我打算为此使用User 类。

我面临的实际问题是关于 UserProfile 类的使用。 UserProfile 用于配置文件,但在我的情况下,这两个用户完全不同,并且在配置文件中需要许多不同的东西。此外,我将来可能会在系统中添加更多用户类型。在 django 中,我们通过在 settings.py 中添加这个单一模型来讲述配置文件

AUTH_PROFILE_MODULE = ‘accounts.userprofile’

那么有没有办法通过在 django 中使用某种继承或抽象类或其他方式来做到这一点,以便我可以获得预期的功能并可以使用 django Profiles

【问题讨论】:

    标签: django django-models django-users django-profiles


    【解决方案1】:

    编辑:好的,经过进一步检查,我之前的答案显然行不通。

    我曾提倡抽象 UserProfile 类。但是,如果你这样做,你就不能实例化它,所以你又回到了原点。

    但是,您可以使用多表继承来实现您想要的。请参阅文档中的 this 和提供灵感的 Quora thread

    我之前贴的代码基本没变,只是排除了 Meta 子类和抽象变量。

    class UserProfile(models.Model):
        # Some Stuff
    
    class CompanyProfile(UserProfile):
        # Some more stuff
    
    class CandidateProfile(UserProfile):
        # Even more stuff
    

    【讨论】:

    • 那么我将在 settings.py 中的 AUTH_PROFILE_MODULE 中设置什么,以便其他 django 应用在与 UserProfile 类交互时使用这些配置文件类?
    • @Hafiz 你设置了 UserProfile 然后在你的视图中插入一些逻辑来处理不同的类型。但是,请重新阅读我的答案,因为我对其进行了重大编辑。我最初提出的解决方案将起作用。新的应该。
    • 大概你会将 AUTH_PROFILE_MODULE 设置为 UserProfile,所以它总是会返回一个 UserProfile 对象。不确定如何将其变成 CompanyProfile 或 CandidateProfile。但也许我说得太早了。我不太了解模型继承如何影响您提出的建议。
    • @alan - 您可以使用它返回 UserProfile,然后确定使用多表继承的用户类型。基本上 profile = request.user.get_profile() 返回 Profile 对象,然后对 profile.companyprofileprofile.candidateprofile 进行真/假测试以查看它是什么(使用此功能时会自动填充这些值 - 您不必自己指定它们, @Hafiz)。
    • @Todd。有趣的提示。我没有意识到这一点。总有一天我会试一试的。这可能会派上用场。
    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 2011-12-04
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多