【问题标题】:Django - Best approach for managing 2+ types of usersDjango - 管理 2 种以上类型用户的最佳方法
【发布时间】:2017-11-11 22:27:30
【问题描述】:

我的项目中将有 2 种以上不同类型的用户,每个用户都有自己的自定义字段和权限。由于我没有更改身份验证方法,因此我计划使用默认用户并创建配置文件模型。

我的问题是,创建一个包含每个用户类型的所有自定义字段并为每个用户显示适当字段的单一配置文件模型是否更好(参见下面的方法 1)?还是为每种用户类型创建一个单独的配置文件模型更好(参见方法 2)?


方法一

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, ...)

    usertype1_customfield1 = models.CharField(...)
    usertype1_customfield2 = models.CharField(...)
    ...

    usertype2_customfield1 = models.CharField(...)
    usertype2_customfield2 = models.CharField(...)
    ...

    # and so on for each user type...

方法二

from django.contrib.auth.models import User

class ProfileUserOne(models.Model):
    user = models.OneToOneField(User, ...)

    customfield1 = models.CharField(...)
    customfield2 = models.CharField(...)
    ...

class ProfileUserTwo(models.Model):
    user = models.OneToOneField(User, ...)

    customfield1 = models.CharField(...)
    customfield2 = models.CharField(...)
    ...

 # and so on for each user type...

【问题讨论】:

    标签: django django-users


    【解决方案1】:

    方法 2 更可取,因为它允许您将每个配置文件的逻辑隔离到其自己的类中。如果您担心重复常见字段,例如 user = models.OneToOneField(User, ...),那么您可以首先为您的应用声明某种 BaseProfile,然后进一步对其进行子类化。

    from django.contrib.auth.models import User
    
    class BaseProfile(models.Model):
        user = models.OneToOneField(User, ...)
    
    class ProfileUserOne(BaseProfile):
    
        customfield1 = models.CharField(...)
        customfield2 = models.CharField(...)
        ...
    
    class ProfileUserTwo(BaseProfile):
    
        customfield1 = models.CharField(...)
        customfield2 = models.CharField(...)
        ...
    
     # and so on for each user type...
    

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多