【发布时间】:2013-10-15 17:43:22
【问题描述】:
我想为 django.contrib.auth 模块使用两种不同的模型。第一个是 Django 提供的默认用户模型,它完全适合管理员访问(组、权限等),但另一个是客户模型,它具有许多不同的属性(城市、区域设置、地址等)默认用户模型。这些用户组必须使用不同的表,并且不能有任何关系。
我创建了一个继承自 AbstractBaseUser 的 Customer 模型和一个名为 ChangeBaseUser 的中间件类,如下所示:
class ChangeBaseUser(object):
def process_request(self, request):
match = resolve(request.path)
if match.app_name == "myapp":
settings.AUTH_USER_MODEL = 'myapp.Customer'
else:
settings.AUTH_USER_MODEL = 'auth.User'
它正在工作,但我不确定这是否是正确的方法,因为在文档中有一个部分 (link) 暗示方便的方法是为默认用户模型分配一个静态值。
如果这不是正确的方法,您对每个模块有多个用户模型有什么建议吗?
【问题讨论】:
-
为什么扩展用户(
customer)与内置用户没有任何关系? -
虽然似乎有一些常用字段,如用户名、密码、last_login 等。但有些字段在管理员用户中使用,如组、权限等,但在客户中不使用,反之亦然也是可能的。另一件事是,在 b2c 项目中将客户和管理员保持在具有不同类型值的同一张表中似乎不是一个好主意。
标签: python django django-models django-admin