【问题标题】:Django: To use User model or Profile model for related modelsDjango:为相关模型使用用户模型或配置文件模型
【发布时间】:2017-11-07 18:12:17
【问题描述】:

这里的一般问题(更具体地说是针对 Django/Python),例如,在创建诸如 Company 之类的模型时,并且多个用户(员工)将与该模型相关联,不同的模型应该如何关联?

即用户配置文件将通过 OneToOneField 与用户对象相关联。但是 Company 对象是否应该通过 ForeignKey 与 User 对象或 UserProfile 对象相关联,为什么这是合适的方式?

所以

class UserProfile(models.Model): # For the Company Employees
    user = models.OneToOneField(UserModel, related_name='employeeprofilemodel', on_delete=models.CASCADE, blank=True,
    null=True)
    ...
    company_rel = models.ForeignKey(CompanyModel, related_name='companyrel', null=True)

class User(AbstractBaseUser): # For all Users
    ...
    company_rel = models.ForeignKey(CompanyModel, related_name='companyrel', null=True)

【问题讨论】:

    标签: python django


    【解决方案1】:

    这更多是基于意见的问题,而不是技术性问题。我推荐前一种方式,即与AUTH_USER_MODEL 建立一对一的关系。然后,您可以将员工相关数据存储在 User Profile 表中,该表可以通过 ForeignKey 关系与 Company 表相关联。这种数据库模式的优点是,您可以在将来(如果需要,当然)更改用户表(即AUTH_USER_MODEL),而不会影响本质上可能敏感的员工详细信息。 User 表独立于数据库中的 Company 表,可用于授权。在 db 查询期间携带的数据也更少,并且可以实现隐式的小级别优化。我认为这比从auth.User 模型扩展更合适。

    每当需要进行数据库重构时,后一种方式可能会危及上述敏感数据。此外,当用户模型拥有比用户所需的更多数据时,查询会更加繁重。使用用户表处理数据库查询时,可能需要特别注意优化。

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2011-04-08
      相关资源
      最近更新 更多