【发布时间】:2014-01-13 18:27:35
【问题描述】:
请注意——这是my original question 在此主题上的更新版本,但随着 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 类,其中包含一些额外的字段,User 上的 OneToOne,然后是额外的 Customer 和 StoreOwner 类 OneToOne在UserProfile。这效果不太好。
鉴于 Django 1.5/1.6 中的变化,我正在尝试提出构建它的最佳方法。现在,我有以下内容:
class CustomerUser(AbstractBaseUser):
...
class StoreOwnerUser(AbstractBaseUser):
...
但是因为会有两种类型的用户,所以我不能将AUTH_USER_MODEL 设置为仅其中一种。
最好的结构是什么,以便我可以拥有具有不同字段的两种不同类型的用户,而不会在用户身份验证、用户创建或管理员方面造成任何问题?
另外,我如何能够仅通过登录来判断此用户是CustomerUser 还是StoreOwnerUser?
【问题讨论】:
-
您可能想要创建一个基本用户,添加一个布尔标志来表示用户是客户还是店主,并附加另一个模型,即配置文件,使用一对一一种关系。
-
问这个问题已经快一年了,但我发现自己处于类似的情况。问题:你最终采取了什么方法?此外,您是否考虑过店主可能想要注册为客户(使用相同的电子邮件地址)的情况?您的设计如何适应这种情况?最后,您是否考虑过为店主和客户提供单独的登录视图(这有助于轻松区分登录用户类型)?
标签: python django django-models django-users django-1.6