0

概要:每个用户帐户都有一个 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 一个)更好的方法来选择“当前”标记的身份?

4

2 回答 2

2

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

于 2010-04-24T19:08:26.560 回答
1

让 UserProfile 跟踪当前正在使用的身份可能会很好。

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

  • 您可以有一个公共父模型类,每个身份类都从该模型类继承,并且您可以将 Profile 上的外键添加到父身份类。

  • 或者,如果继承没有实际意义,您可以使用泛型关系

于 2010-04-24T19:37:12.553 回答