You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选指定信贷员下且仅含1笔有效贷款的Business对象

获取符合特定贷款条件的Business对象

模型说明

  • Business:包含关联到User的外键credit_officer
  • Loan:包含关联到Business的外键business,以及实例方法disbursed()和active()

需求

获取归属于指定credit_officer,且对应的活跃贷款数量恰好为1的Business对象。

解决方案

由于active()是模型实例方法,无法直接用于ORM的数据库层面查询,需要先将其逻辑转化为数据库可识别的过滤条件(比如基于字段的筛选)。以下是修改后的查询代码:

from django.db.models import Count, Q

# 替换为你实际的active()方法对应的数据库过滤条件
# 示例:假设active()是判断贷款状态为"active"
active_loan_condition = Q(status="active")

cro_businesses = (
    Business.objects.filter(credit_officer=credit_officer_id)
    # 统计每个Business下符合活跃条件的贷款数量
    .annotate(active_loan_count=Count("loan", filter=active_loan_condition))
    # 筛选出活跃贷款数量等于1的Business
    .filter(active_loan_count=1)
    .values("id", "name", "credit_officer__id")
    .order_by("_created_at")
)

关键说明

  1. annotate+Count:通过annotate给每个Business对象添加一个active_loan_count字段,存储其关联的活跃贷款数量,filter参数用于限定只统计符合活跃条件的贷款。
  2. 过滤数量条件:使用filter(active_loan_count=1)直接筛选出满足数量要求的Business。
  3. 实例方法转数据库条件:必须将active()的逻辑转化为数据库层面的过滤规则(比如Q对象、字段等于某个值等),因为ORM的统计操作是在数据库中执行的,无法调用Python实例方法。

内容的提问来源于stack exchange,提问作者Anjayluh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:07:38