我是Django的新手。我陷入了一个问题,我觉得这超出了我目前在Django中的能力。 问题在于表列的标题与其相对模型字段的字符串表示形式相同。要进一步了解这一点, 假设我有一个如下模型:
class Car(models.Model):
company_name = models.ForeignKey(Company,related_name='cars')
transmission_type = models.CharField(max_length=50)
color = models.CharField(max_length=25)
age = models.PositiveIntegerField(blank=True,null=True)
对于此模型,我要生成如下的HTML表:
<table>
<thead>
<th>Company Name</th>
<th>Transmission Type</th>
<th>Color</th>
<th>Age</th>
</thead>
<tbody>
<tr>
<td>{{company_name}}</td>
<td>{{transmission_type}}</td>
<td>{{color}}</td>
<td>{{age}}</td>
</tr>
</tbody>
</table>
如何在Django中实现这一目标?
答案 0 :(得分:2)
您可以在视图中执行最重要的处理部分。例如:
def some_view(request):
model = Car
field_names = [f.name for f in model._meta.get_fields()]
data = [[getattr(ins, name) for name in field_names]
for ins in Model.objects.prefetch_related().all()]
return render(request, 'some_template.html', {'field_names': field_names, 'data': data})
并以some_template.html
的形式出现:
<table>
<thead>
{% for head in field_names %}
<th>{{ head }}</th>
{% endfor %}
</thead>
<tbody>
{% for row in data %}
<tr>
{% for cell in row %}
<td>{{ cell }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
因此,我们为每个字段名称和每个模型实例构建一个二维表。然后,我们将这些数据呈现在包含<table>
逻辑的HTML模板中。
编辑:使用verbose_name
。由于字段名称有时有些含糊,因此我们也可以使用字段的verbose_name
:
def some_view(request):
model = Car
field_names = list(model._meta.get_fields())
titles = [f.verbose_name for f in field_names]
field_Names = [f.name for f in field_names]
data = [[getattr(ins, name) for name in field_names]
for ins in Model.objects.prefetch_related().all()]
return render(request, 'some_template.html', {'field_names': titles, 'data': data})