def some_view(request):
teams = Team.objects.all()
field_names = [f.name for f in Team._meta.get_fields()]
return render(request, 'some_template.html',
{'teams': teams, 'field_names': field_names}
)
from operator import attregetter
def some_view(request):
teams = Team.objects.all()
field_names = [f.name for f in Team._meta.get_fields()]
atgetters = [attrgetter(fn) for fn in field_names]
rows = [[ag(team) for ag in atgetters] for team in teams]
return render(request, 'some_template.html',
{'teams': teams, 'field_names': field_names, 'data': data}
)
1条答案
按热度按时间bmp9r5qi1#
可通过以下方式获得模型的字段:
这是一个**
Field
**[GitHub]对象的元组。这些Field
对象有一个name
属性,所以我们可以通过以下方式获得字段名称:如果我们不知道模型是什么,我们可以通过
type(..)
获得模型示例的模型引用:然而,所有这些逻辑并不真正属于Django模板,而是在视图中(通过设计,Django模板有点限制,以防止在模板中写入 * 业务逻辑 *)。因此,我们可以将字段名称列表传递给模板:
然而,如果你想打印这些团队的值,那么这仍然不起作用,因为我们不能轻易地在模板中获得 arbitrary 属性。然后我们可以再次将一些处理转移到视图中:
所以这里
data
是一个包含列表的列表,这样data[i][j]
包含一个名为field_name[j]
的字段的值,用于teams[i]
。