我的项目中将有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...
答案 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...