Какой лучший способ иметь несколько типов профилей участников в Django - PullRequest
2 голосов
/ 30 марта 2012

Я вижу другой вопрос на stackoverflow.com, название которого похоже, но которое не соответствует моим требованиям, и мои пользователи сильно отличаются, поэтому только разные роли могут не работать должным образом. У меня есть сценарий портала вакансий, где один тип пользователя - это компания, у которой разные атрибуты и разные функциональные возможности, в то время как другой - кандидат, который может показать свой профиль и возобновить e.t.c., у них будут разные URL-адреса. Таким образом, они совершенно разные, но обычно они оба являются зарегистрированными пользователями. Они будут использовать формы входа, у них будет смена пароля, и я собираюсь использовать для этой цели класс User.

Фактическая проблема, с которой я сталкиваюсь, касается UserProfile использования класса. UserProfile используется для профилей, но в моем случае эти два пользователя совершенно разные и им нужно много разных вещей в профиле. Также я могу добавить больше типов пользователей в системе в будущем. В то время как в Django, мы говорим о профиле, добавив эту единственную модель в settings.py

AUTH_PROFILE_MODULE = ‘accounts.userprofile’

Так есть ли способ сделать это, используя какой-то класс наследования или абстрактный класс в django или каким-либо другим способом, чтобы я мог получить намеченную функциональность и использовать django Profiles?

1 Ответ

2 голосов
/ 30 марта 2012

РЕДАКТИРОВАТЬ: Хорошо, после дальнейшей проверки мой предыдущий ответ явно не будет работать.

Я выступал за абстрагирование класса UserProfile. Однако, если вы сделаете это, вы не сможете создать его экземпляр, поэтому вы вернетесь к исходной точке.

Однако вы можете использовать наследование нескольких таблиц, чтобы достичь того, чего вы хотите. См. это в документах и ​​ нить Quora , которая послужила источником вдохновения.

Код, который я разместил ранее, остается в основном без изменений, за исключением исключения подкласса Meta и абстрактной переменной.

class UserProfile(models.Model):
    # Some Stuff

class CompanyProfile(UserProfile):
    # Some more stuff

class CandidateProfile(UserProfile):
    # Even more stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...