python - Django:将用户模型或配置文件模型用于相关模型

标签 python django

这里的一般问题(更具体地针对 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)

最佳答案

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

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

关于python - Django:将用户模型或配置文件模型用于相关模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44394888/

相关文章:

python - 如何获得条目小部件来保存我输入的内容? Python Tkinter

python - 具有 postgresql 错误值的 Django 应用程序对于类型字符变化来说太长(1)

javascript - Django 对 Javascript 文件翻译的支持

python - 保存本地日期时间将时间偏移 4 分钟

python - 正则表达式返回前缀为 "="的值

python - 从字典中获取值到集合中的最有效方法

django - kubernetes 中的定期数据库备份?

python - 如何提交仅给出 HTML 源的表单?

Python 遍历文件系统。奇怪的问题

python - Discord.py 嵌入缩进