Django最佳用户模型设计

时间:2014-11-30 19:59:40

标签: python django database-design design-principles

可能有些人会说这是一个反复出现的话题,但在阅读了很多文章后,对我来说似乎仍然很模糊。我的问题是关于使用和扩展用户模型的最佳方法,它保留了Django中可用的身份验证(和其他)机制。但是,我更喜欢描述我的设计:

  • 有用户(患者)可以注册提供基本信息(名字,姓氏,出生日期,性别,电子邮件,密码)。最好是,电子邮件应该替换用户名。
  • 当患者在申请中时,它可以注册一名新患者(想象一下该家庭成员),但不需要电子邮件和密码,因为他们不会登录系统。

对于第一部分,Django doc建议将User与OneToOne关系扩展到Profile。但是,要通过电子邮件替换用户名,他们建议创建一个从AbstractUser扩展的自定义用户,以及相关的UserManager。第二个要求就像做一个从用户到用户的一对多关系。因此,根据Django,这应该是最好的策略:创建一个全新的用户模型和一对多用户 - 用户添加区分主要用户和家庭成员的特定属性?或者使用配置文件扩展Django用户,然后使用一对多关系配置文件配置文件?哪个选项保留了Django用户身份验证和模型管理的最佳好处?

感谢您的任何评论,建议,示例。

1 个答案:

答案 0 :(得分:2)

首先,如果您想将电子邮件用作用户名,请使用Django custom user功能。它运作良好。 然后,请注意,这不是因为您创建了自己的用户,而是无法使用个人资料扩展它。

所以,一个好的解决方案可能是:

  • 创建Django自定义用户而不尝试向其添加特定字段(这里唯一的目的是使用电子邮件来记录而不是用户名)。
  • 使用User类创建一个具有一对一关系(空白= True)的PatientProfile类。

这样,可以登录的患者将与User实例相关,并将此实例用于此目的。另一方面,无法登录的患者将与任何用户实例无关。

最后,使用OneToMany与PatientProfile建立关系是没有问题的。