2014-11-30 5 views
3

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

  • Есть пользователи (пациенты), которые могут зарегистрироваться, предоставляя базовую информацию (имя, фамилия, дата рождения, пол, адрес электронной почты, пароль). Предпочтительно электронная почта должна заменить имя пользователя.
  • Когда пациент находится в приложении, он может зарегистрировать нового пациента (представить себе члена семьи), но не требуется электронная почта и пароль, потому что они не войдут в систему.

Для первой части документ Django предлагает расширить Пользователь с отношением OneToOne к профилю. Однако, чтобы заменить имя пользователя по электронной почте, они предлагают затем создать пользовательский пользователь, распространяющийся от AbstractUser, а также связанный UserManager. Второе требование похоже на отношение «один ко многим» от пользователей к пользователям. Итак, согласно Django, которая должна быть лучшей стратегией: создание совершенно новой модели пользователя и пользователь-пользователь «один ко многим», добавляющий специфический атрибут, который отличает основных пользователей и членов семьи? ИЛИ расширение пользователя Django с профилем, а затем профиль профиля отношения «один ко многим»? Какой вариант лучше всего сохраняет преимущества пользовательской аутентификации Django и администрирования модели?

Благодарим за любые комментарии, предложения, примеры.

+0

Просто следуйте документам по электронной почте как имя пользователя. Если член семьи не будет входить в систему, это анонимный пользователь, а не настоящий пользователь. Просто создайте для них отдельную модель. – allcaps

ответ

2

Во-первых, если вы хотите использовать электронную почту в качестве имени пользователя, используйте функциональную возможность Django custom user. Это работает хорошо. Затем обратите внимание, что это не потому, что вы создали своего собственного пользователя, что вы не можете продлить его с помощью Profile.

Таким образом, хорошее решение может быть:

  • Создание Django пользовательского пользователя, не пытаясь добавить определенные поля в ней (одна и единственная цель здесь заключается в использовании электронной почты для входа вместо имени пользователя).
  • Создайте класс PatientProfile, который имеет отношение «один к одному» (пусто = True) с классом User.

Таким образом, пациент, который может войти в систему, будет связан с экземпляром пользователя и будет использовать этот экземпляр для этой цели. С другой стороны, пациент, который не может войти в систему, не будет связан с каким-либо экземпляром пользователя.

В конце концов, нет никакой проблемы с использованием отношений OneToMany с PatientProfile для того, что вы хотите сделать.

+0

У меня есть связанный с этим вопрос. http://stackoverflow.com/questions/34213066/considerating-an-user-schema-on-django Я думаю, что класс PatientProfile является хорошей альтернативой, хотя, каковы ваши соображения по этому поводу? Благодарю. – bgarcial

Смежные вопросы