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

如何对Django QuerySet进行水平遍历,依次获取表头字段及对应值

实现水平遍历(按指定字段顺序取值)的方案

你可以通过以下几种方式实现需求,按适用场景选择即可:


方案1:手动指定字段顺序(最适配当前需求)

直接定义你需要遍历的字段顺序列表,再通过getattr方法动态从每行实例中取值:

# 按你需要的顺序定义字段名列表
field_order = [
    'ID',
    'Library',
    'mono_full',
    'mono_simple',
    'mono_brief',
    'mono_complex',
    'mono_vendor',
    'mono_asc',
    'mono_added',
    'TestDate',
    'Division'
]

# 遍历每一行
for row in filtered_table:
    # 按定义的字段顺序依次取值
    for field_name in field_order:
        current_value = getattr(row, field_name)
        # 这里可以替换为你需要的业务逻辑
        print(f"{field_name}: {current_value}")
    # 不同行之间可加分隔区分
    print("-" * 30)

方案2:自动获取模型字段(无需手动罗列字段)

如果不想手动写全字段名,可以通过Django模型的_meta属性自动获取字段列表,再调整为你需要的顺序:

# 自动获取模型所有字段名,排除Django默认生成的自增主键id(和你自定义的ID字段不冲突)
all_fields = [field.name for field in NewTables07._meta.get_fields() if field.name != 'id']
# 可以手动调整all_fields的顺序到你需要的遍历顺序
# 示例调整顺序:all_fields = ['ID', 'Library'] + [f for f in all_fields if f not in ['ID', 'Library']]

# 后续遍历逻辑和方案1一致
for row in filtered_table:
    for field_name in all_fields:
        print(getattr(row, field_name))

方案3:高性能取值(仅需要字段值时使用)

如果不需要用到模型实例的其他方法,仅需要字段值,可以用values_list直接按指定顺序返回值元组,查询性能更高:

# 按你需要的顺序传入字段名,直接查询得到值元组列表
filtered_values = NewTables07.objects.filter(criterion_date & criterion_location).values_list(
    'ID', 'Library', 'mono_full', 'mono_simple', 'mono_brief', 
    'mono_complex', 'mono_vendor', 'mono_asc', 'mono_added', 
    'TestDate', 'Division'
)

# 直接遍历取值即可
for row in filtered_values:
    for value in row:
        print(value)
    print("-" * 30)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:36:02