Пользовательские менеджеры Django для модели User - PullRequest
9 голосов
/ 29 октября 2009

Как бы я расширил модель пользователя по умолчанию с помощью пользовательских менеджеров?

Мое приложение имеет много типов пользователей, которые будут определены с помощью встроенной модели групп. Таким образом, пользователь может быть клиентом, сотрудником и так далее. Было бы идеально иметь возможность сделать что-то вроде:

User.clients.filter(name='Test')

Получить всех клиентов с именем Test. Я знаю, как сделать это с помощью пользовательских менеджеров для пользовательских моделей, но я не уверен, что делать с моделью User, сохраняя при этом все вкусности, по крайней мере, за исключением изменения исходного кода django само по себе, что нет нет ....

Ответы [ 2 ]

18 голосов
/ 29 октября 2009

Да, вы можете добавить собственный менеджер прямо в класс User. Это обезьянничное исправление, и оно делает ваш код менее обслуживаемым (кто-то, пытающийся выяснить ваш код, может не иметь представления, где класс User приобрел этот пользовательский менеджер или где он мог бы найти его). В этом случае это относительно безвредно, так как вы фактически не отменяете существующее поведение класса User, просто добавляете что-то новое.

from django.contrib.auth.models import User
User.add_to_class('clients', ClientsManager())

Если вы используете Django 1.1+, вы также можете создать подкласс User с прокси-моделью ; не влияет на базу данных, но позволит вам подключить дополнительные менеджеры без monkeypatch.

0 голосов
/ 29 октября 2009

Вы можете профиль пользователя для этого

AUTH_PROFILE_MODULE = 'Accounts.UserProfile'

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

Или вы можете написать свой аутентифицировать бэкэнд Добавил его в настройках

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...