如何使用Django 1.5的新可配置用户模型功能来实现多个用户类型?
我想有两种用户类型:私人用户和交易用户,每种用户类型都有自己的必填字段。
我能想到两种实现方法:
1) 多表继承
class BaseUser(AbstractBaseUser):
email = models.EmailField(max_length=254, unique=True)
# ...
class PrivateUser(BaseUser):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
# ...
class TradeUser(BaseUser):
company_name = models.CharField(max_length=100)
# ...
在可配置的用户模型中,使用多表继承是否存在问题?
2) 使用带有“类型”属性的单个模型
class User(AbstractBaseUser):
email = models.EmailField(max_length=254, unique=True)
user_type = models.CharField(max_length=30, choices={
'P': 'Private',
'T': 'Trade',
})
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
company_name = models.CharField(max_length=100, blank=True)
# ...
这种方法需要一些基于user_type
的条件验证。
哪一种方法最适合我的使用场景?或者也许有更好的方法来实现这个目标?
另外,在情况1下,我如何过滤我的用户?
谢谢。
@property
定义名称为is_private_user
的属性,代替if user.user_type == 'Private':
。这样就可以使用if user.is_private_user:
进行判断了。对于嵌套模型的相同目的,应该使用isinstance()
来检查用户类型,但同样的功能也可以通过实现@property
来实现。 - Vladimir Prudnikov