问题描述
我正在尝试提出一种更好的结构来处理 django 应用程序中的用户数据。目前,应用中有两种用户,个人和组织。有特定于个人的数据和特定于组织的数据。例如,个人可以有名字和姓氏,而组织只有其组织名称。
这是模型当前的样子
class CustomUser(AbstractUser):
first_name = models.CharField(_('first name'),max_length=30,blank=True) # from AbstractUser
last_name = models.CharField(_('last name'),max_length=150,blank=True) # from AbstractUser
organization_name = models.CharField(_('organization name'),max_length=180,blank=True)
is_individual = models.BooleanField(default=False)
is_organization = models.BooleanField(default=False)
是否可以为特定用户类型设置特定字段?类似的东西:
Individual
-- first_name
-- last_name
# more data concerning individuals
Organization
-- organization_name
# more data concerning organizations
解决方法
使用一对一字段将组织和个人用户映射到实际用户模型。
class CustomUser(AbstractUser):
is_individual = models.BooleanField(default=False)
is_organization = models.BooleanField(default=False)
class OrganizationUser(models.Model):
organization_name = models.CharField(_('organization name'),max_length=180,blank=True)
user = models.OneToOneField(
CustomUser,on_delete=models.CASCADE,primary_key=True,)
class IndividualUser(models.Model):
first_name = models.CharField(_('first name'),max_length=30,blank=True) # from AbstractUser
last_name = models.CharField(_('last name'),max_length=150,blank=True) # from AbstractUser
user = models.OneToOneField(
CustomUser,)
,
您可以为个人和组织创建 2 个不同的类
class User(Abstract):
first_name = models.CharField(_('first name'),blank=True) # from AbstractUser
class Organization(Abstract):
organization_name = models.CharField(_('organization name'),blank=True)
在 view.py
中,通过检查条件 is_individual
/ is_organization
,您可以在数据库的相应表中存储和检索该详细信息。