代码之家  ›  专栏  ›  技术社区  ›  Scott

Django-具有多个标识的用户帐户

  •  0
  • Scott  · 技术社区  · 15 年前

    简介: 每个用户帐户都有一个用户配置文件来保存扩展信息,如电话号码、地址等。然后,一个用户帐户可以有多个标识。存在多种类型的标识,其中包含不同类型的信息。结构如下:

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

    用户帐户可以连接到n个不同类型的标识,但一次只能使用一个标识。

    看起来,django的方法是将所有连接的标识(user.identitytype1_set.select_related())收集到一个查询集中,然后检查每个标识是否有某种“当前”字段。

    问题: 有人能想出比三个数据库查询(每个IdentityType一个)更好的方法来选择“当前”标记的标识吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Bjorn    15 年前

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

        2
  •  1
  •   digitaldreamer    15 年前

    让用户配置文件跟踪当前使用的身份可能会更好。

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

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

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