2015-02-10 11 views
1

Django noob here - 我最近指出了用于注册/处理用户的django-all-auth,我发现它在其即时设置中很棒。使用django-all-auth实现多个配置文件

但是,我试图实现多个用户配置文件模型的绊脚石。在阅读其他答案时,我发现this是迄今为止最接近的答案,但并非真正需要的。

编码我自己的基本注册时,用户会选择一个账户类型(例如基本,专业,精英 - 每个都是他们自己的配置文件模型)。根据所选链接,注册表单将显示通用用户注册表单以及用户所选类型的配置文件表单。

我知道我可以去完全定制all-auth并做出类似这样的工作,但是我希望能够指向一个涉及较少破坏原始应用程序的方向。我已经考虑过在注册后重定向用户以选择配置文件类型,但这似乎是很多额外的步骤。

感谢您的帮助!

回答

0

要扩展基本用户类,只需子类AbstractUser。你可以在docs找到。有了这个,你可以添加你的基本用户丢失的字段。

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

您可以创建类似:

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 

如果你定义的基类抽象的,你不会有一个表,所以你不能创建该模型对象,但你的每个子类都将在它自己的表上。如果您这样做,您可能需要额外的逻辑来处理用户更改配置文件类型(即从专业版转为精英版)时的情况。

为了保持从Django的allauth这种分离,只是完成注册(创建一个表单,并在定义设置ACCOUNT_SIGNUP_FORM_CLASS覆盖allauth默认与您的基本信息+挑选一个轮廓式的形式),一旦用户登录将其重定向到他们的个人资料以完成该过程。

+0

对,我了解继承和我如何从基类中继承子类......我想我想要更多地包裹我的头是什么形式的流。我不确定如何在表单中实现类选择。最初我有一个静态页面,其中URLconf使用正则表达式根据链接中的变量提取正确的表单。但是随着allauth的出现,似乎没有一种优雅的方式可以在不真正自定义原始视图和模板的情况下将这种情况拉开。这是我不确定的。谢谢您的帮助! – 2015-02-10 16:04:04

+0

您正尝试拥有多个注册表单,而不是单一注册,然后再添加一个配置文件设置。如果您需要针对不同类型的帐户使用不同的配置文件,则可以在注册后执行此操作(将信号分配给用户或在用户访问其配置文件时指定)。如果您需要这些信息,请添加一个mixin重定向到他们的配置文件,直到信息更新。 – cdvv7788 2015-02-10 23:13:21

相关问题