Подтвердить что ты не робот

Django - Профили пользователей разных типов

У меня есть приложение Django, которое позволяет различным пользователям: фирмам, администраторам, внешним людям и т.д. Конечно, все это легко управлять с помощью системы и групп проверки подлинности по умолчанию.

Моя проблема заключается в том, что пользователи, принадлежащие к разным группам, будут иметь другую связанную информацию - например, фирмам необходимо будет предоставить некоторую коммерческую информацию, которая не имеет смысла для частных пользователей. Следовательно, мне нужно прикрепить разные профили в зависимости от группы. (В моих группах приложений взаимоисключающие.)

К сожалению, Django позволяет подключать только одну модель в качестве профиля, и эта модель объявляется в settings.AUTH_PROFILE_MODULE. Внутренне это извлекается методом User.get_profile(), который в основном просто считывает это значение и выполняет некоторые проверки, например, что модель действительно существует.

Я думал о подклассификации User и переопределении метода get_profile(), чтобы он возвращал другую модель в зависимости от группы.

Есть ли более простой/более чистый способ управления различными профилями?

То, что я предлагаю, кажется немного взломанным, учитывая, что пользовательские профили были введены точно, чтобы избежать необходимости подкласса User.

4b9b3361

Ответ 1

Создайте модель с OneToOneField до User и related_name.

Е. г:.

class Firm(models.Model):
    user = models.OneToOneField(User, related_name='firm')
    # other fields

class External(models.Model):
    user = models.OneToOneField(User, related_name='external')
    # other fields

Затем вы можете проверить существование этих атрибутов в User (if hasattr(request.user, 'firm')) и вернуть соответствующий экземпляр. Я бы поместил его в обычное промежуточное ПО, которое установило бы request.user_profile, например.