当前位置: 首页 > 面试题库 >

Python-遍历模板中的模型实例字段名称和值

栾和玉
2023-03-14
问题内容

我正在尝试创建一个基本模板以显示所选实例的字段值及其名称。可以将其视为表格式的该实例的值的标准输出,在第一列中具有字段名称(如果在字段上指定,则为verbose_name),在第二列中具有该字段的值。

例如,假设我们具有以下模型定义:

class Client(Model):
    name = CharField(max_length=150)
    email = EmailField(max_length=100, verbose_name="E-mail")

我希望将其像这样在模板中输出(假定具有给定值的实例):

Field Name      Field Value
----------      -----------
Name            Wayne Koorts
E-mail          waynes@email.com

我要实现的目标是能够将模型的实例传递给模板,并能够在模板中动态地对其进行迭代,如下所示:

<table>
    {% for field in fields %}
        <tr>
            <td>{{ field.name }}</td>
            <td>{{ field.value }}</td>
        </tr>
    {% endfor %}
</table>

有没有一种经过Django批准的简洁方法?这似乎是一项非常普通的任务,对于这个特定项目,我将需要经常执行。


问题答案:

model._meta.get_all_field_names()将为你提供模型的所有字段名称,然后你就可以使用model._meta.get_field()它getattr(model_instance, 'field_name')来获取详细名称,并从模型中获取值。

注意:model._meta.get_all_field_names()在django 1.9中已弃用。而是使用model._meta.get_fields()获取模型的字段并field.name获取每个字段名称。



 类似资料:
  • 问题内容: 我正在尝试创建一个基本模板以显示所选实例的字段值及其名称。可以将其视为表格式的该实例的值的标准输出,在第一列中具有字段名称(如果在字段上指定,则为verbose_name),在第二列中具有该字段的值。 例如,假设我们具有以下模型定义: 我希望将其像这样在模板中输出(假定具有给定值的实例): 我要实现的目标是能够将模型的实例传递给模板,并能够在模板中动态地对其进行迭代,如下所示: 有没有

  • 问题内容: 我正在尝试显示健身课程清单(瑜伽,普拉提等)。对于每个班级类型,都有几个班级,因此我想将所有瑜伽班和所有普拉提班归为一组,依此类推。 我做了这个功能来切片并绘制它的地图 现在的问题是,根据http://golang.org/pkg/text/template/,我该如何遍历它,您需要以格式访问它,我不知道键(除非我也传递了一个切片模板中的键数)。如何在我的视图中解包此地图。 我目前所拥

  • 在前面的例子中,我们已经看到使用 Ruby 可以根据表达式的结果插入不同的值。 你也可以使用循环对数组中的每个元素生成内容。 操作步骤 添加如下代码到你的配置清单: $ipaddresses = [ '192.168.0.1', '158.43.128.1', '10.0.75.207' ] file { "/tmp/addresslist.txt": c

  • 我正在使用Spring Boot网络流量r2dbc来实现REST应用编程接口服务器。 为模型生成的模式正在复制具有不同定义(名称、限制等)的同一字段。 我的模型: 路由器 为扩展模型生成的OpenAPI模式 我有两个字段:tenant_id和tenantId,但这在模型中是同一个字段。还要注意,tenantId的定义忽略了模式属性(如required和pattern属性)。 我遗漏了一些注释?似乎

  • 问题内容: 我的字典看起来像这样(字典中的字典): 现在,我只是想在模板上显示信息,但是我很挣扎。我的模板代码如下: 它只是在模板上显示“ 0”? 我也尝试过: 这甚至不显示结果。 我想也许我需要更深入地迭代一个级别,所以尝试了一下: 但这不会显示任何内容。 我究竟做错了什么? 问题答案: 可以说你的数据是- 你可以使用该data.items()方法来获取字典元素。注意,在django模板中,我们

  • 当我尝试编译这段代码时 对于g 4.8.2,我得到以下错误消息 (与3.4版本的叮当声几乎相同)。 首先,我认为代码是正确的,应该进行编译,因为foobar是模板声明中的一个依赖名称,应该仅在模板实例化的第二阶段进行查找。在最后一行中完成此操作时,已声明“foobar(int)”。顺便说一句,当我取消注释最上面的行时,代码会编译,但这两个声明都在实例化之前,所以这应该无关紧要。 其次,我觉得错误信