【发布时间】:2016-09-05 00:01:16
【问题描述】:
我必须在我的应用程序中管理多种用户类型,
- Person - 可以是演员、舞蹈家、歌手、导演、演员导演、编舞、音乐总监等
- 公司 - 可以是制作公司、音乐公司等
我创建了具有这两个模型的公共字段的用户模型。
class User(AbstractBaseUser):
#common fields
class PersonType(models.Model):
# persone_type which is a choice field
class Person(User):
# many to many with PersonType
class CompanyType(models.Model):
# company_type which is a choice field
class Company(User):
# many to many with CompanyType
这种方式正确吗?
我如何管理这两种用户的注册和登录。
即在注册时,我应该根据 api 数据中发送的“account_type”字段创建用户对象还是个人/公司对象。
如果是以后的选项,我如何管理两个模型的身份验证和登录?
【问题讨论】:
-
这在某种程度上是基于意见的,因为这不是对与错的问题。这是一个受许多因素影响的设计问题。不过,就我个人而言,我不会与用户模型混淆,我可能会使用与任意数量的“用户配置文件”模型的用户模型的一对一关系。
-
好吧,我没有得到关于“用户资料”的最后一部分......所以你的意思是对于每个用户类型,如演员、导演、舞者,会有不同的模型,而 AUTH_USER_MODE 将是用户,对吗?跨度>
-
这是主要思想。然后,您可以基于用户配置文件模型拥有单独的多个模型,或者拥有一个具有某些分类字段的单个模型,有很多可能性。正如我所说,这最终取决于许多因素。
-
在开始之前,请确保您了解 AbstractBaseUser 和 AbstractUser 之间的区别。一旦您在项目中走得更远,您的用户模型就更难更改,我发现如果可能的话,最好坚持使用 AbstractUser。
-
嗨,是的,我看到了区别,但 AbstractUser 将用户名作为唯一键,而在我的要求中,用户名不存在(而只有 first_name,last_name 存在)所以我使用了最少的 AbstractBaseUser。
标签: django python-3.x database-design django-models database-schema