如何在Django中查询Tld表,仅获取匹配条件的对象主键值?
如何在Django中仅查询模型的主键值
嘿,这个需求用Django ORM就能轻松搞定,我给你梳理几个最实用的实现方案:
1. 使用values_list(最推荐)
这是最贴合你需求的方式,指定要获取的字段为id,再加上flat=True参数,就能得到一个只包含主键值的可迭代QuerySet:
# 获取符合条件的所有主键值的QuerySet id_queryset = Model.objects.filter(d=bu).values_list('id', flat=True) # 如果需要转换成普通Python列表,直接用list()包裹即可 id_list = list(id_queryset)
这段代码对应的原生SQL就是你提到的SELECT id FROM model WHERE d = <buv>,完全匹配你的预期。
2. 适配自定义主键的通用写法
如果你的模型没有用默认的id作为主键(比如自定义了主键字段),可以通过模型的_meta属性动态获取主键名,让代码更通用:
# 动态获取模型的主键字段名 pk_field_name = Model._meta.pk.name # 查询并获取主键值 id_queryset = Model.objects.filter(d=bu).values_list(pk_field_name, flat=True)
小提醒:别混淆values和values_list
如果用values('id')的话,返回的是字典组成的列表(比如[{'id': 1}, {'id': 2}]),这和你要的纯主键值列表不一样,所以优先选values_list(flat=True)。
内容的提问来源于stack exchange,提问作者Walley
相关产品推荐
相关产品推荐

