Django - 管理2类以上用户的最佳方法

时间:2017-11-11 22:27:31

标签: django django-users

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

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

方法1

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...

方法2

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...

1 个答案:

答案 0 :(得分:0)

方法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...