Django - 具有多个身份的用户帐户

时间:2010-04-24 18:52:34

标签: django user-profile

概要:每个用户帐户都有一个UserProfile来保存电话号码,地址等扩展信息。然后,用户帐户可以有多个身份。有多种类型的身份可以容纳不同类型的信息。结构就像这样:

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 个答案:

答案 0 :(得分:2)

为什么不跟踪会话而不是数据库使用的配置文件。将状态存储在数据库中是没有意义的,这就是会话的用途。

答案 1 :(得分:1)

让UserProfile跟踪当前正在使用哪个Identity可能会很好。

假设每个身份都是不同的模型,你可以做两件事之一来实现这一点。

  • 您可以拥有每个标识类继承的公共父模型类,并且可以将配置文件中的外键添加到父标识类。

  • 或者,如果继承没有实际意义,您可以使用generic relations