Django中用户的两级扩展

时间:2016-03-27 16:54:21

标签: python django django-models

我正在开展一个Django项目。有两种类型的用户。第一种类型 - 客户(UserProfile)是一个扩展的内置User,因为每个人都必须存储它的电话地址等。但是那里是另一种名为User的{​​{1}}。翻译器具有所有权限和属性,如Customer(UserProfile)和一些新属性 - TranslatorLanguages等。

我选择了处理Prices的最常用方法:

UserProfile

现在,我想创建class UserProfile(models.Model): user = models.OneToOneField(User,on_delete=models.CASCADE,related_name='userprofile') telephone = models.CharField(max_length=40,null=True) ... 个人资料。我无法决定是否应延长Customer(每个用户已经User)或扩展UserProfile本身。

所以选项A是:

UserProfile

选项B是:

class TranslatorUserProfile(models.Model):
    user_profile = models.OneToOneField(User)
    languages ...
    ...

译员将能够访问比class TranslatorUserProfile(models.Model): user_profile = models.OneToOneField(UserProfile) languages ... ... 常规User更多的页面,并且当然会有更多属性。

有一些模式吗?我该怎么办?

1 个答案:

答案 0 :(得分:0)

逻辑上,您的翻译人员扩展了普通用户。为了使两者的db表保持独立,可以使两个子类成为定义其公共属性的抽象基础模型:

class AbstractUserProfile(models.Model):
     user = models.OneToOneField(User,on_delete=models.CASCADE,related_name='%(class)s')
     telephone = models.CharField(max_length=40,null=True)
     ...

     class Meta:
          abstract = True

class UserProfile(AbstractUserProfile):
    pass

class TranslatorUserProfile(AbstractUserProfile):
    languages = ...

我在工作中的项目中有这样的结构。