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

use*_*er1 3 django django-templates django-models django-views

假设我有这个模型

class Model():
          var1      = models.TextField()
          var2      = models.FloatField()
          var3      = models.FloatField()
          var4      = models.FloatField()
Run Code Online (Sandbox Code Playgroud)

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

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

基本上我想要的东西

Object_List其中包含DB表中的field names和field values两者all rows

Object_List - 我会抓住表格 SELECT var1, var2, var4 from table

所以在模板中我可以使用

{% for field in Object_List.fields %}
  <th>{{ field }}</th> 
 {% endfor %}
Run Code Online (Sandbox Code Playgroud)

然后我可以使用的数据

 {% for object in Object_List.objects %}
            <tr>
            {% for field in object %}
                 <td>{{ value }}</td> 
            {% endfor %}
            </tr>
 {% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*man 5

似乎显而易见的方法是使用values查询:

objects = Model.objects.values('var1', 'var2', 'var4')
Run Code Online (Sandbox Code Playgroud)

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

{% 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 %}
Run Code Online (Sandbox Code Playgroud)