Django noob在这里 - 我最近指的是用于注册/处理用户的django-all-auth,我发现它在近乎即时的设置中非常棒。
但是我在尝试实现多个用户配置文件模型时遇到了绊脚石。在阅读其他答案时,我发现this是迄今为止最接近的答案,但并不是我真正需要的答案。
在编写我自己的基本注册时,用户会选择一种帐户类型(例如,基本,专业,精英 - 每个都是他们自己的个人资料模型)。根据所选的链接,注册表单将显示通用用户注册表单以及用户选择的类型的配置文件表单。
我知道我可以完全自定义all-auth并制作类似这样的工作,但我希望能够指向一个不会破坏原始应用程序的方向。我已经考虑过在注册后重定向用户以选择配置文件类型,但这似乎是很多额外的步骤。
感谢您的帮助!
答案 0 :(得分: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会为每个模型创建1个表,包括在子类表上仅包含新字段。这使得每个继承级别的连接成为必要,所以尽量不要滥用它。
使用继承还有第二种方法:
class ProfileBase(models.Model):
user=models.OneToOneField(User)
class Meta:
abstract=True
如果将基类定义为抽象,则不会有表格,因此您无法为该模型创建对象,但每个子类都将在其自己的表上。如果你这样做,你可能需要额外的逻辑来处理用户更改配置文件类型(即从专业人员到精英)的情况。
要将此与django-allauth分开,只需完成注册(创建表单并在您的设置中定义ACCOUNT_SIGNUP_FORM_CLASS以覆盖所有身份验证默认值与您的基本信息+选择个人资料类型表单)和一旦您的用户已登录,将其重定向到其个人资料以完成此过程。