迭代模板中的模型实例字段名称和值我正在尝试创建一个基本模板来显示所选实例的字段值及其名称。可以将其视为表格格式中该实例值的标准输出,其中第一列中的字段名称(特别是如果在字段上指定了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 KoortsE-mail waynes@email.com我想要实现的是能够将模型的实例传递给模板,并能够在模板中动态迭代它,如下所示:<table>
{% for field in fields %}
<tr>
<td>{{ field.name }}</td>
<td>{{ field.value }}</td>
</tr>
{% endfor %}</table>是否有一个整洁,“Django批准”的方式来做到这一点?这似乎是一项非常常见的任务,我需要经常为这个特定的项目做这件事。
3 回答
狐的传说
TA贡献1804条经验 获得超3个赞
您可以使用Django的to-python queryset序列化程序。
只需在您的视图中输入以下代码:
from django.core import serializers data = serializers.serialize( "python", SomeModel.objects.all() )
然后在模板中:
{% for instance in data %} {% for field, value in instance.fields.items %} {{ field }}: {{ value }} {% endfor %}{% endfor %}
它的巨大优势在于它处理关系字段。
对于字段子集,请尝试:
data = serializers.serialize('python', SomeModel.objects.all(), fields=('name','size'))
千万里不及你
TA贡献1784条经验 获得超9个赞
最后在dev邮件列表上找到了一个很好的解决方案:
在视图中添加:
from django.forms.models import model_to_dictdef show(request, object_id): object = FooForm(data=model_to_dict(Foo.objects.get(pk=object_id))) return render_to_response('foo/foo_detail.html', {'object': object})
在模板中添加:
{% for field in object %} <li><b>{{ field.label }}:</b> {{ field.data }}</li>{% endfor %}
添加回答
举报
0/150
提交
取消