如何在模板中动态引用 Django 查询集对象中的字段?

How can I dynamically reference the fields in a Django query set object in a template?

我有一个由通用 ListView 引用的模型,并提供给模板。尝试在模板中创建一个 table 给我一个 TypeError: not iterable - 我做错了什么?

示例代码

Class bookmodel(models.Model):
     Book = models.CharField(max_length=255)
     Author = models.CharField(max_length=255)

观看次数

Class bookview(generic.ListView):
     model = bookmodel
     template = “books.html”

它会生成一个 object_list 类似的东西:

<Queryset [<bookmodel: Grapes of Wrath >, <bookmodel: I, Robot>]>

模板布局如下:

{% extends ‘base.html’ %}
{% block content %}
<table>
    <thead>
         <tr>
               <th> book </th>
               <th> author </th>
         </tr>
    </thead>
    <tbody>
         {% for object in object_list %}
         <tr>
                {% for field in object %}
                <td> {{ field }} </td>
                {% endfor %}
         </tr>
         {% endfor %}
     </tbody>
</table>
{% endblock %}

但这失败并出现上述错误。

@Karioki 在他的评论中友情提出的链接问题提出了以下代码:

def attrs(self):
    for field in self._meta.fields:
        yield field.name, getattr(self, field.name)

yield 函数在我的模板中莫名其妙地不起作用,无论是从视图还是模板标签:

下面的衍生代码做了:

def get_values(self):
        value_set = [getattr(self, field.name) for field in self._meta.fields]
        return value_set

虽然这对我来说仍然很笨拙,但我将其标记为稻草人答案,但我希望会有另一个答案提供更有效的方法来调查 Django 模板中的数据库记录。