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

Django不遍历关联关系直接使用外键存储值执行startswith查询方法

解决方案

问题原因

你最初用img_documentnbr_id__startswith查询不生效,是因为你给外键字段显式指定了db_column='IMG_DocumentNbr',覆盖了Django默认生成的[外键字段名]_id格式的存储字段名,ORM无法识别img_documentnbr_id这个字段。
而img_documentnbr__drawingid__startswith的写法会触发两表的INNER JOIN,所以没有对应Tblinvrev记录的条目会被自动过滤,不符合需求。

可行方案

方案1:直接使用自定义的db_column查询(最简便)

直接用你在外键中定义的数据库列名作为过滤键,用字典传参的方式传入过滤条件,不会触发跨表关联:

DjImagingImage.objects.filter(**{"IMG_DocumentNbr__startswith": "cow"})

方案2:动态获取外键存储字段名(兼容性更好,无需硬编码列名)

通过外键字段的attname属性自动获取实际存储的字段名,避免硬编码数据库列名带来的维护问题:

# 获取DjImagingImage表中外键实际存储的字段名
fk_stored_field = DjImagingImage.img_documentnbr.field.attname
# 构造过滤条件
filter_params = {f"{fk_stored_field}__startswith": "cow"}
# 执行查询
result = DjImagingImage.objects.filter(**filter_params)

两种方案都仅查询DjImagingImage单表,不会关联Tblinvrev表,不会丢失无关联的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:21:02