如何筛选指定信贷员下且仅含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") )
关键说明
- annotate+Count:通过
annotate给每个Business对象添加一个active_loan_count字段,存储其关联的活跃贷款数量,filter参数用于限定只统计符合活跃条件的贷款。 - 过滤数量条件:使用
filter(active_loan_count=1)直接筛选出满足数量要求的Business。 - 实例方法转数据库条件:必须将
active()的逻辑转化为数据库层面的过滤规则(比如Q对象、字段等于某个值等),因为ORM的统计操作是在数据库中执行的,无法调用Python实例方法。
内容的提问来源于stack exchange,提问作者Anjayluh
相关产品推荐
相关产品推荐

