使用django all auth实现多个概要文件

使用django all auth实现多个概要文件,django,django-allauth,Django,Django Allauth,Django noob在这里-最近有人指出Django all auth用于注册/处理用户,我发现它的即时设置非常棒 然而,我在尝试实现多个用户配置文件模型时遇到了障碍。在阅读其他答案时,我发现这是迄今为止最接近的答案,但并不是我真正需要的 当编码我自己的基本注册时,用户会选择一个帐户类型,例如basic、pro、elite,每个帐户都是他们自己的配置文件模型。根据选择的链接,注册表单将显示通用用户注册表单以及用户选择类型的配置文件表单 我知道我可以完全定制所有的auth并制作类似的东西,但我希

Django noob在这里-最近有人指出Django all auth用于注册/处理用户,我发现它的即时设置非常棒

然而,我在尝试实现多个用户配置文件模型时遇到了障碍。在阅读其他答案时,我发现这是迄今为止最接近的答案,但并不是我真正需要的

当编码我自己的基本注册时,用户会选择一个帐户类型,例如basic、pro、elite,每个帐户都是他们自己的配置文件模型。根据选择的链接,注册表单将显示通用用户注册表单以及用户选择类型的配置文件表单

我知道我可以完全定制所有的auth并制作类似的东西,但我希望能指向一个减少破坏原有应用的方向。我曾经考虑过让用户在注册后重定向以选择配置文件类型,但这似乎需要很多额外的步骤


谢谢你的帮助

要扩展基本用户类,只需子类AbstractUser。你可以在地图上找到。使用此选项,您可以添加基本用户缺少的字段

现在,您需要具有不同字段的几种类型的概要文件,或者可能是相同的字段,但每次都添加新字段

您可以创建如下内容:

class ProfileBase(models.Model):
    user=models.OneToOneField(User)

class ProfilePro(ProfileBase):
    pro_field=models.SomeField(Foo)

#You can extend ProfilePro here if you want it to include the pro_field
class ProfileElite(ProfileBase):
    elite_field=models.someField(Bar)
一旦有了这些模型,创建表单应该很容易。 请注意,当您以这种方式子类化时,django会为每个模型创建一个表,在子类表上只包含新字段。这使得每个继承级别都需要一个连接,所以不要滥用它

还有第二种使用继承的方法:

class ProfileBase(models.Model):
    user=models.OneToOneField(User)

    class Meta:
        abstract=True
如果将基类定义为抽象类,则不会为其创建表,因此无法为该模型创建对象,但每个子类都将位于其自己的表中。如果您这样做,您可能需要额外的逻辑来处理用户更改配置文件类型的情况,即从pro更改为elite


要将其与django allauth分开,只需完成注册创建一个表单,并在您的设置中定义以使用基本信息覆盖所有默认身份验证,然后选择一个配置文件类型表单,一旦用户登录,将其重定向到其配置文件以完成此过程。

Right,我了解继承以及如何从基类中派生子类。。。我想我想更多地关注的是形式的流动。我不确定如何在表单中实现课堂选择。最初,我有一个带有链接的静态页面,其中URLconf使用regex根据链接中的变量提取正确的表单。但是对于allauth,如果不真正定制原始视图和模板,似乎就没有一种优雅的方式来完成这类事情。这就是我不确定的。谢谢你的帮助!您正在尝试使用多个注册表单,而不是单一的注册,然后使用额外的配置文件设置。如果您需要为不同类型的帐户提供不同的配置文件,您可以在注册后或在用户访问其配置文件时这样做。如果您需要这些信息,请添加一个mixin以重定向到他们的配置文件,直到信息更新为止。