2017-06-06 83 views
0

当创建模型(例如Company)和一些用户(员工)将与以下相关的一般问题(对于Django/Python更具体)这样的模型,不同模型应该如何相关?Django:为相关模型使用用户模型或配置文件模型

I.e.用户配置文件将通过OneToOneField与用户对象相关联。但是,如果公司对象通过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) 

回答

1

这更多的是一种基于意见的问题,而不是技术性。我建议采用前一种方式,即与AUTH_USER_MODEL创建一对一的关系。然后,您可以将员工相关数据存储在可通过ForeignKey关系与公司表相关的用户配置文件表中。这种数据库模式的优点在于,您可以在将来修改用户表(即AUTH_USER_MODEL)(当然,如果需要的话),而不会影响可能敏感的员工详细信息。用户表独立于数据库中的公司表,并可用于授权。在数据库查询期间数据传输量也较少,隐含地可以实现一小部分优化。我认为这比从auth.User模型扩展更合适的方式。

无论何时需要数据库重构,后一种方式可能会危害上述敏感数据。而且,当用户模型比用户需要更多数据时,查询将会更加繁重。使用用户表处理db查询时,可能需要额外注意优化。