如何对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
相关产品推荐
相关产品推荐

