如何从 Django 查询中提取字段名和值

Posted

技术标签:

【中文标题】如何从 Django 查询中提取字段名和值【英文标题】:How can i extract the fieldnames and values from Django query 【发布时间】:2011-09-30 07:08:23 【问题描述】:

假设我有这个模型

class Model():
          var1      = models.TextField()
          var2      = models.FloatField()
          var3      = models.FloatField()
          var4      = models.FloatField()

现在我想要一个可用于所有模型的模板。我的要求是

    我想在视图中显示 var1 、 var2 、 var 4 而不是 var 3 在模板中,我不想硬编码像 var1 这样的字段名称, var2, var3 我将制作 表的标题,所以我想要 喜欢从数组中得到它 我想要这些变量对应的所有数据

基本上我想要类似的东西

Object_List 包含 field namesfield values 两者都用于 DB 表中的 all rows

Object_List -- 我将获取表单SELECT var1, var2, var4 from table

这样我就可以在模板中使用

% for field in Object_List.fields %
  <th> field </th> 
 % endfor %

然后对于我可以使用的数据

 % for object in Object_List.objects %
            <tr>
            % for field in object %
                 <td> value </td> 
            % endfor %
            </tr>
 % endfor %

我不确定我是否解释清楚。是否有可能实现这样的目标。 主要要求是我只希望选定的字段显示在模板中,而不是模型中提到的所有字段

【问题讨论】:

恐怕你还没有真正解释清楚。您想在哪里指定显示哪些字段? 在原始 sql select var1,var2 , var4 from table 中查询 for.e,g 以便我只获得我需要的字段 【参考方案1】:

似乎最明显的方法是使用values 查询:

objects = Model.objects.values('var1', 'var2', 'var4')

这为您提供了一个字典列表,每个字典都将字段名称映射到字段值。因此,您可以从其中的第一个中获取标题行:

% for object in objects %
    % if forloop.first %
    <th>
       % for fieldname in object.keys %<td> fieldname </td>% endfor %
    </th>
    % endif %
    <tr>
      % for value in object.values %<td> value </td>% endfor %
    </tr>
% endfor %

【讨论】:

你是冠军伙伴,效果很好。如果我想要所有行,我可以使用 vsame 函数还是必须使用 .all()。因为我已经用 objects.all() 尝试过你的循环,但它没有工作,因为它返回了查询集 我的示例确实为您提供了所有行 - 如果您想过滤行,只需以正常方式添加 .filter(whatever=whatever)。如果您指的是所有列,则可以使用空的 values() 调用。 其实我的意思是所有的列,Values() 就可以了。再次感谢您的帮助

以上是关于如何从 Django 查询中提取字段名和值的主要内容,如果未能解决你的问题,请参考以下文章

Django 自定义表名和字段名

如何在 Django 中使用字段名称、条件和值进行动态过滤

Django模板:从模型查询集对象中提取字段

sqlserver 如何获得所有数据库名 如何获得已知数据库所有表名 和 已知表明获得所有字段名和字段类型

sql查询表中字段名和数据

使用SQL Server和Mysql查询所有数据库名表名和字段名