当前位置: 首页 > 知识库问答 >
问题:

呼叫select_related经理

羿博延
2023-03-14

我举了以下例子:

class Profile(models.Model):
    ...

class Person(models.Model):
    profile = models.ForeignKey(Profile, ...)

我为Profile类创建了复杂的模型管理器,并且我构建了一个视图来列出大量的人。我试图计算数据库中的所有内容,所以我想从PersonQuerySet调用配置文件管理器。

为此,我需要做如下工作:

Person.objects.filter(...).select_related('profile', queryset=Profile.objects.with_computed_revenue().all())

然后我应该能够从SQL检索person.profile.computed_revenue,函数“with_computed_revenue”是注释computed_revenue的ProfileManager的函数。

最终目标是添加个人查询集:

.values('profile__computed_revenue')

对于预回迁相关的预回迁,这似乎是可能的,但我找不到与select_相关的等价物。

共有3个答案

薛博赡
2023-03-14

select_related仅在您没有提供向后关系(即不设置related_name参数)时才对ForeignKey关系起作用。

因此,如果你真的想使用选择相关的,然后从个人模型的配置文件字段中删除相关的\u名称参数,否则你必须使用预取相关的

你可以在这里了解更多

阴波峻
2023-03-14

要将自定义查询集与选择相关一起使用,可以使用预回迁相关和预回迁对象

Person.objects.prefetch_related(
    Prefetch('profile', queryset=Profile.objects.with_computed_revenue())
)

然而,这不会使注释在值()中可用

龙高超
2023-03-14

如果我正确理解了你的意思,就像Django docs在https://docs.djangoproject.com/en/3.2/ref/models/querysets/#prefetch-相关的:

通过创建SQL联接并在select语句中包含相关对象的字段来选择与_相关的工作。因此,select_related将获取同一数据库查询中的相关对象。但是,为了避免跨“多”关系加入会导致更大的结果集,select_related仅限于单值关系-外键和一对一。另一方面,prefetch_-related对每个关系执行单独的查找,并在Python中执行“连接”。这允许它预取多对多和多对一对象,这是使用select_-related无法完成的,此外,select_-related还支持外键和一对一关系。

您应该对FK关系使用select_related,对多对一关系使用prefetch_related

在您的情况下,Person模型与Profile有多对一的关系,因此您必须使用prefetch\u related

 类似资料:
  • 我在调用我的onLeScan时遇到问题。我在开始扫描中放置了一个标签,每次都会被调用。出于某种原因,我的onLeScan永远不会被调用。有人看到我所做的有问题吗?onLeScan应该在开始扫描后立即调用,对吗? 编辑更改了我的onLeScan函数。仍然不起作用,但我认为我正在走向正确的道路。DeviceBeacon是一个只包含方法的类:getName()、getSignal()和getAddres

  • 1、接口声明 如果您希望在自己的CRM系统嵌入呼叫中心能力,需要对接智齿呼叫中心能力,在对接前请您阅读如下对接流程,以便您更好的完成对接。如果只对接基本呼叫能力,预计对接及调试过程1周左右即可完成。 第一步:获取第三方用户接口调用唯一凭证 请联系您的售后经理,获取您企业的如下信息: 1、companyid(企业id) 2、appid(第三方用户接口调用唯一凭证id) 3、app_key(第三方用户

  • 我是RXJava的新手。在一个场景中,我希望调用第一个登录webservice(),如果成功,则希望调用另一个webservice()以获取用户信息。

  • 是否有一个gradle插件或任何其他方法调用hiberNate工具hbm2ddl任务来从注释的类生成数据库模式,而不必列出一些配置文件中的所有实体(@Entity),但在类路径中发现它们? 最好是针对Hibernate5,但Hibernate4也可以。

  • 本章主要讲述智齿客服系统中,呼叫中心业务模块的全部介绍,将以呼叫管理员和呼叫客服两个角色来进行讲解; 同时还会单独介绍IVR的配置流程。 5.1.客服业务-作为呼叫管理员 作为呼叫管理员,在本节主要介绍呼叫管理员对企业下的呼叫客服成员以及呼叫相关业务设置进行的操作。 技能组管理 通话设置 呼叫质检评分方案设定 路由策略设置 队列溢出策略设置 IVR设置 号码管理 5.1.1.技能组管理 技能组包括