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

如何提取Django模型/查询集字段列名生成列表用于模板动态表头?

在Django中动态提取模型字段的verbose_name作为表格表头

嘿,这个需求其实很简单,Django的模型元数据(_meta)已经帮我们准备好了获取字段verbose_name的方法,我来给你两种实现思路,适配不同的场景:

方法一:自动获取模型所有字段的表头(排除自动生成字段)

如果想把模型里所有自定义的字段都作为表头,你可以在视图里直接通过模型的_meta属性提取字段的verbose_name,同时过滤掉Django自动生成的字段(比如id)和反向关联的字段:

视图代码

from django.shortcuts import render
from .models import Model_1
from django.db import models

def model_table_view(request):
    # 筛选出模型中手动定义的、非自动生成的字段
    model_fields = [
        field for field in Model_1._meta.get_fields()
        if not field.auto_created and field.concrete
    ]
    
    # 提取每个字段的verbose_name作为表头
    header = [field.verbose_name for field in model_fields]
    
    # 处理表格数据行:遍历查询集,提取每个对象的字段值
    queryset = Model_1.objects.all()
    rows = []
    for obj in queryset:
        row_data = []
        for field in model_fields:
            # 针对外键字段,转换为对象的字符串表示(对应__str__方法)
            if isinstance(field, models.ForeignKey):
                row_data.append(str(getattr(obj, field.name)))
            else:
                row_data.append(getattr(obj, field.name))
        rows.append(row_data)
    
    return render(request, 'your_template.html', {'header': header, 'rows': rows})

方法二:指定特定字段生成表头(更灵活可控)

如果你只想显示模型中的部分字段,可以手动指定字段名列表,再对应提取它们的verbose_name,这种方式更灵活:

视图代码

from django.shortcuts import render
from .models import Model_1

def model_table_view(request):
    # 手动指定要显示的字段名
    target_fields = ['name1', 'name2', 'date3']
    
    # 提取指定字段的verbose_name作为表头
    header = [Model_1._meta.get_field(field_name).verbose_name for field_name in target_fields]
    
    # 快速获取数据行:用values_list直接提取字段值(注意外键会返回ID,若要显示名称需额外处理)
    # 如果外键需要显示名称,还是建议用方法一中的循环对象方式
    rows = list(Model_1.objects.values_list(*target_fields, flat=False))
    
    return render(request, 'your_template.html', {'header': header, 'rows': rows})

模板使用

你提供的模板完全可以直接用,不需要修改!视图传进去的header会动态生成表头,rows会填充表格内容,完美匹配你的需求。

小提示

如果你的外键模型(比如Model_2、Model_3)的__str__方法已经定义了友好的显示内容(比如返回name字段),那方法一中的外键处理逻辑会自动显示正确的名称,不用额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:01:49