【问题标题】:Automatically select related for OneToOne field自动为 OneToOne 字段选择相关
【发布时间】:2013-11-09 12:23:29
【问题描述】:

在我的 Django 项目中,我为每个 django 用户都有一个 Profile,并且 Profile 与 Info 模型相关。两种关系都是 OneToOne。由于大多数时候我都在为用户使用 Profile 和 Info 模型,所以我希望默认选择这些模型,这样我就不会再次访问数据库。有没有办法使用 Django 身份验证来做到这一点?

【问题讨论】:

    标签: django-models django-authentication prefetch


    【解决方案1】:

    使用 django >=1.5 自定义用户模型使用选择相关功能。

    user = User.objects.select_related('profile_related', 'info_related')
    

    【讨论】:

      【解决方案2】:

      我知道这已经存在了一段时间,但我正在添加我的解决方案以防其他人面临类似情况。 Django(从 v1.8 甚至 v1.7 开始)允许您自定义管理器(查询时使用的 .objects)

      您可以为个人资料设置这样的经理:

      class ProfileManager(models.Manager):
          def get_queryset(self):
              return super(ProfileManager,self).get_queryset().select_related('user')
      

      然后在模型中:

      class Profile(models.Model):
          user = models.OneToOneField(
              User,
              primary_key=True,
              on_delete=models.CASCADE
          )
      
          # ... other fields 
      
          # the manager
          objects = ProfileManager()
      
          # ...
      

      那么您对个人资料的所有查询也会自动选择相关用户。

      您也可以扩展此代码以包含 Info 模型。

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 2011-04-02
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-01
        • 2016-11-10
        相关资源
        最近更新 更多