要扩展基本用户类,只需子类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默认与您的基本信息+挑选一个轮廓式的形式),一旦用户登录将其重定向到他们的个人资料以完成该过程。
对,我了解继承和我如何从基类中继承子类......我想我想要更多地包裹我的头是什么形式的流。我不确定如何在表单中实现类选择。最初我有一个静态页面,其中URLconf使用正则表达式根据链接中的变量提取正确的表单。但是随着allauth的出现,似乎没有一种优雅的方式可以在不真正自定义原始视图和模板的情况下将这种情况拉开。这是我不确定的。谢谢您的帮助! – 2015-02-10 16:04:04
您正尝试拥有多个注册表单,而不是单一注册,然后再添加一个配置文件设置。如果您需要针对不同类型的帐户使用不同的配置文件,则可以在注册后执行此操作(将信号分配给用户或在用户访问其配置文件时指定)。如果您需要这些信息,请添加一个mixin重定向到他们的配置文件,直到信息更新。 – cdvv7788 2015-02-10 23:13:21