Обратите внимание - это обновленная версия моего первоначального вопроса по этому вопросу, но заслуживает того, чтобы вас снова попросили с изменением того, как 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
на User
, а затем дополнительные классы Customer
и StoreOwner
, которые были OneToOne
на UserProfile
. Это не очень хорошо работает.
Учитывая изменения в Django 1.5/1.6, я пытаюсь найти лучший способ структурировать это. Сейчас у меня есть следующее:
class CustomerUser(AbstractBaseUser):
...
class StoreOwnerUser(AbstractBaseUser):
...
Но поскольку у пользователя будет два типа пользователей, я не могу установить AUTH_USER_MODEL
только один из них.
Каков наилучший способ структурирования этого, так что у меня могут быть два разных типа пользователей с разными полями, без каких-либо проблем с аутентификацией пользователя, созданием пользователя или администратором?
Кроме того, как я могу определить только логин, является ли этот пользователь CustomerUser
или StoreOwnerUser
?