我正在开展一个Django
项目。有两种类型的用户。第一种类型 - 客户(UserProfile)是一个扩展的内置User
,因为每个人都必须存储它的电话,地址等。但是那里是另一种名为User
的{{1}}。翻译器具有所有权限和属性,如Customer(UserProfile)和一些新属性 - Translator
,Languages
等。
我选择了处理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
更多的页面,并且当然会有更多属性。
有一些模式吗?我该怎么办?
答案 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 = ...
我在工作中的项目中有这样的结构。