概要:每个用户帐户都有一个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一个)吗?
答案 0 :(得分:2)
为什么不跟踪会话而不是数据库使用的配置文件。将状态存储在数据库中是没有意义的,这就是会话的用途。
答案 1 :(得分:1)
让UserProfile跟踪当前正在使用哪个Identity可能会很好。
假设每个身份都是不同的模型,你可以做两件事之一来实现这一点。
您可以拥有每个标识类继承的公共父模型类,并且可以将配置文件中的外键添加到父标识类。
或者,如果继承没有实际意义,您可以使用generic relations。