如何从 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 names
和 field 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 %
我不确定我是否解释清楚。是否有可能实现这样的目标。 主要要求是我只希望选定的字段显示在模板中,而不是模型中提到的所有字段
【问题讨论】:
恐怕你还没有真正解释清楚。您想在哪里指定显示哪些字段? 在原始 sqlselect 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 查询中提取字段名和值的主要内容,如果未能解决你的问题,请参考以下文章