Александр Кошелев
Александр Кошелев Python-разработчик

Юзер или профиль?

Вы никогда не задумывались на что делать ссылку в модели, если надо привязать её к пользователю? К User или Profile (любой модели которая выполняет роль “профиля”)? Этот вопрос, конечно, справедлив для тех проектов. где есть необходимость в профиле как таковом, иначе ссылка на User и все дела.

Я для себя какое-то время назад решил, что Profile выгоднее. Небольшой анализ всё же показал, что всё зависит от конкретного случая и вариантов использования результирующей модели.

Рассмотрим ситуацию, когда основная информация для работы приложения, относящаяся к пользователю, как раз хранится в профиле. Тогда при ссылке на User нужно будет каждый раз “дотягивать” ещё и профиль. Не очень удобно, да и накладно к тому же. Если же завязаться на профиль, то всё становится прозрачнее и оптимальнее. Тем более, если профиль реализован через наследование от User, то вообще разницы для клиентского кода модели не будет - профиль для него прозрачно становится юзером. Хочу лишь отметить, чтобы прозрачность была полной, не забудьте у профиля переопределить менеджер либо на UserManager, либо на его наследника с дополнительным функционалом.

В своих проектах я именно так и поступаю. Например в этом блоге посты (автор) связаны с профилем.

Если предполагается что приложение. которое вы разрабатываете будет использоваться как библиотечный код в неизвестном окружении, то завязка на профиле может оказаться лишней и ненужной. Но это уже конечно другое приложение, и изначальное допущение, что “основная информация для работы в приложении, относящаяся к пользователю, как раз хранится в профиле” уже не действует. Иначе профиль просто необходим, а значит на него можно ссылаться.

Этим вопросом в своё время задался не только я. Единожды я наткнулся на схожее обсуждение в django-users. Где Малкольм высказывает свои интересные мысли на этот счет.

PS: сегодня в 12 часов у нас в Яндексе состоится Джанго-спринт. Приходите, будет очень интересно. Я конечно же тоже буду. Но не надолго - дерби как никак в 4 часа…

comments powered by Disqus