请注意——这是我关于这个主题的一个更新版本,起初的问题可以在我的原始问题中找到。但随着Django处理用户和身份验证方式的变化,这个问题再次值得提出。
我正在制作一个网站,其中有两种非常不同类型的用户,让我们称它们为“客户”和“商家”。他们都在网站上注册,但具有非常不同的功能。客户
只拥有一个简单的个人资料,并可以在喜欢的商店之间购物。商家
只有一个帐户,但可以访问多个商店,每个商店可以有多个商家
。
模型的确切细节并不重要,但这两种用户类型需要非常不同的字段。模型理想情况下应该如下所示:
Customer
email (username)
password
name
address
time_zone
preferred_shipping
favorite_stores (many-to-many field)
...
Store Owner
email (username)
password
name
balance
stores_owned (many-to-many field on Stores)
stores_managed (many-to-many field on Stores)
...
最初,由于Django的用户自定义支持不足,我创建了一个名为UserProfile
的类,其中包含一些附加字段并在User
上使用了OneToOne
,然后创建了额外的Customer
和StoreOwner
类,它们都与UserProfile
是OneToOne
关系。但这种方式并不理想。
考虑到Django 1.5/1.6的更新,我正在尝试找到最佳结构方式。目前,我的方案如下:
class CustomerUser(AbstractBaseUser):
...
class StoreOwnerUser(AbstractBaseUser):
...
但由于存在两种类型的用户,我不能将AUTH_USER_MODEL
设置为其中的一种。
最佳结构方式是什么,可以让我拥有具有不同字段的两种不同类型的用户,而不会在用户身份验证、用户创建或管理员方面引起任何问题?
另外,我如何仅通过登录就能确定该用户是CustomerUser
还是StoreOwnerUser
?