Обратите внимание: это обновленная версия мой первоначальный вопрос на эту тему, но заслуживает того, чтобы задать его еще раз в связи с изменением того, как 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
?