我正在Django Rest Framework中的一个项目上工作。该项目大部分已经完成,但是突然有新的需求来自客户。
他们的要求是Worker
还应该能够以Customer
的身份进行注册,而Customer
也应该能够以Worker
的身份进行注册。它们位于不同的应用程序中。
问题在于我的数据库方案是以不同的方式实现的,而我没有用于工作人员的单独表。现在我被困在该怎么办,这是我的数据库结构:
Class User(AbstractUser):
username
email unique=True
first_name
last_name
...
Class Worker(User):
weight
job_category
假设工作者email
是“ dudeworker@gmail.com”,并且他们想使用相同的Customer
(dudeworker@gmail.com)来注册为email
。如预期的那样,他们会收到一条错误消息,说电子邮件已经存在。现在,如果我将Worker
表分开,那么我必须在代码中进行很多更改。
针对这种情况的最佳解决方案是什么? 通过覆盖Worker表中的email字段,给出错误。
答案 0 :(得分:0)
您可以使用worker表中的字段之一来指向customer表吗? 也许附加值。
答案 1 :(得分:0)
我认为解决方案是
创建一个profile
表,将用户保留为foreign-key
值,而不是one-to-one
值,并在与({{1 }
现在,当用户以customer, worker)
身份注册且具有与客户相同的电子邮件时(反之亦然),则首先检查用户表中是否存在电子邮件(如果是),然后仅使用类型创建一个新的配置文件worker
或worker
(在相反情况下)
他们每次在登录响应中以customer
或worker
的身份登录时,都会发送您的类型(工作人员或客户)以及配置文件ID及其详细信息,这样您就可以为客户或其他映射用户的表中的工作人员,然后您可以轻松检查用户的个人资料类型
希望获得帮助
另一种方法是修改用户表,我认为这是一个坏主意,因为您已经设计了模式