如何不硬编码字段名执行Django ORM查询
实现方法
直接使用Python原生的字典解包语法**,就能把JSON字典的键值对动态转为Django ORM查询的关键字参数,完全不需要提前硬编码字段名。
代码示例
import json from .models import AcronymSecurityControlMaster from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned # 示例原始JSON数据 raw_json_str = '{"postgres_id":"10"}' # 解析为Python字典 query_dict = json.loads(raw_json_str) # 可选步骤:对查询值做类型转换,适配模型字段类型(比如示例中字符串格式的数字转整型) processed_query = {} for k, v in query_dict.items(): if isinstance(v, str) and v.isdigit(): processed_query[k] = int(v) else: processed_query[k] = v # 动态查询 try: result = AcronymSecurityControlMaster.objects.get(**processed_query) except ObjectDoesNotExist: # 自行处理无匹配数据的逻辑 result = None except MultipleObjectsReturned: # 自行处理匹配到多条数据的逻辑 result = None
额外注意点
- 可以提前校验JSON的键是否属于对应模型的合法字段,避免传入不存在的字段触发ORM报错
- 多条件查询也完全兼容,只要JSON里写入多个键值对,解包后会自动拼接为AND查询条件
内容的提问来源于stack exchange,提问作者Mad's Man
相关产品推荐
相关产品推荐

