Django - учетная запись пользователя с несколькими удостоверениями - PullRequest
0 голосов
/ 24 апреля 2010

Сводка: Каждая учетная запись пользователя имеет профиль пользователя для хранения расширенной информации, такой как номера телефонов, адреса и т. Д. Затем учетная запись пользователя может иметь несколько удостоверений. Существует несколько типов удостоверений, которые содержат разные типы информации. Структура будет выглядеть так:

User
  |<-FK- UserProfile
  |
  |<-FK- IdentityType1
  |<-FK- IdentityType1
  |<-FK- IdentityType2
  |<-FK- IdentityType3 (current)
  |<-FK- IdentityType3
  |<-FK- IdentityType3

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

По-видимому, способ Django состоит в том, чтобы собрать все связанные идентификаторы (user.IdentityType1_set.select_related ()) в QuerySet, а затем проверить каждый из них на наличие какого-либо «текущего» поля.

Вопрос: Может ли кто-нибудь придумать лучший способ выбрать «текущую» помеченную идентификацию, чем три запроса к БД (по одному для каждого IdentityType)?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010

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

1 голос
/ 24 апреля 2010

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

Предполагая, что каждая личность - это отдельная модель, вы можете сделать одно из двух, чтобы это произошло.

  • У вас может быть общий родительский класс модели, от которого наследуется каждый класс идентификации, и вы можете добавить внешний ключ профиля в родительский класс идентификации.

  • В качестве альтернативы, если наследование не имеет практического смысла, вы можете использовать родовые отношения .

...