Python Django最佳用户模型设计

Python Django最佳用户模型设计,python,django,database-design,design-principles,Python,Django,Database Design,Design Principles,也许你们中的一些人会说这是一个反复出现的话题,但在阅读了许多文章之后,我仍然觉得它很模糊。我的问题是关于使用和扩展用户模型的最佳方式,以保留Django中可用的身份验证(和其他)机制。然而,我更喜欢描述我的设计: 有些用户(患者)可以注册,提供基本信息(姓名、姓氏、出生日期、性别、电子邮件、密码)。最好用电子邮件代替用户名 当患者在应用程序中时,它可以注册一个新患者(假设是家庭成员),但不需要电子邮件和密码,因为他们不会登录系统 对于第一部分,Django doc建议将用户与一个概要文件的O

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

  • 有些用户(患者)可以注册,提供基本信息(姓名、姓氏、出生日期、性别、电子邮件、密码)。最好用电子邮件代替用户名
  • 当患者在应用程序中时,它可以注册一个新患者(假设是家庭成员),但不需要电子邮件和密码,因为他们不会登录系统
对于第一部分,Django doc建议将用户与一个概要文件的OneToOne关系扩展。然而,为了用电子邮件替换用户名,他们建议创建一个从AbstractUser扩展而来的自定义用户,以及一个关联的UserManager。第二个需求类似于从用户到用户的一对多关系。那么,根据Django的说法,哪一个应该是最好的策略:创建一个全新的用户模型和一对多用户添加一个区分主要用户和家庭成员的特定属性?或者使用配置文件扩展Django用户,然后使用一对多关系配置文件?哪个选项可以最好地保留Django用户身份验证和模型管理的好处


感谢您的评论、建议和示例。

首先,如果您想使用电子邮件作为用户名,请使用
Django自定义用户
功能。它工作得很好。 然后,请注意,并不是因为您创建了自己的用户,所以无法使用概要文件对其进行扩展

因此,一个好的解决方案可能是:

  • 创建Django自定义用户,而不尝试向其添加特定字段(这里唯一的目的是使用电子邮件而不是用户名来登录)
  • 创建一个与用户类具有一对一关系(blank=True)的
    PatientProfile
这样,可以登录的患者将与用户实例相关,并将为此目的使用此实例。另一方面,无法登录的患者将与任何用户实例无关


最后,使用与PatientProfile的OneToMany关系来做你想做的事情是没有问题的。

只需按照电子邮件上的文档作为用户名即可。如果一个家庭成员不登录,那就是一个匿名用户,而不是真正的用户。为他们创建一个单独的模型。我有一个相关的问题。我认为PatientProfile类是一个不错的选择,不过,您对此有何考虑?谢谢