从Django的父类覆盖子类中的字段

时间:2020-06-27 09:28:00

标签: python django django-rest-framework

我正在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字段,给出错误。

2 个答案:

答案 0 :(得分:0)

您可以使用worker表中的字段之一来指向customer表吗? 也许附加值。

答案 1 :(得分:0)

我认为解决方案是

  1. 创建一个profile表,将用户保留为foreign-key值,而不是one-to-one值,并在与({{1 }

  2. 现在,当用户以customer, worker)身份注册且具有与客户相同的电子邮件时(反之亦然),则首先检查用户表中是否存在电子邮件(如果是),然后仅使用类型创建一个新的配置文件workerworker(在相反情况下)

  3. 他们每次在登录响应中以customerworker的身份登录时,都会发送您的类型(工作人员或客户)以及配置文件ID及其详细信息,这样您就可以为客户或其他映射用户的表中的工作人员,然后您可以轻松检查用户的个人资料类型

希望获得帮助

另一种方法是修改用户表,我认为这是一个坏主意,因为您已经设计了模式