请注意——这是我关于这个主题的原始问题的更新版本,但随着 Django 处理用户和身份验证的方式发生变化,值得再次提问。
我正在一个有两种非常不同类型的用户的网站上工作——我们称他们Customers
为Store Owners
. 两者都在网站上注册,但功能却大不相同。 Customers
只需拥有一个个人资料,就可以在他们喜欢的商店中购物。 Store Owners
有一个帐户但可以访问多个商店,每个商店可以有多个Store Owners
.
模型的确切细节无关紧要,但这两种类型的用户需要非常不同的字段。理想情况下,模型看起来像这样:
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
类,其中包含一些带有OneToOne
on的附加字段User
,然后是on的附加Customer
和StoreOwner
类。这不是很好。OneToOne
UserProfile
鉴于 Django 1.5/1.6 中的变化,我正在尝试提出构建它的最佳方法。现在,我有以下内容:
class CustomerUser(AbstractBaseUser):
...
class StoreOwnerUser(AbstractBaseUser):
...
但是因为会有两种类型的用户,我不能AUTH_USER_MODEL
只设置其中一种。
构建此结构的最佳方法是什么,以便我可以拥有具有不同字段的两种不同类型的用户,而不会在用户身份验证、用户创建或管理员方面造成任何问题?
另外,我如何能够单独从登录中判断该用户是 aCustomerUser
还是 a StoreOwnerUser
?