Ich möchte Daten in einer Tabelle anzeigen, in der eine Viele-zu-Eins-Beziehung zwischen meinen Spaltenwerten (Komponenten) und meinen Zeilen (Materialien) besteht. Zwischen diesen Spaltenwerten und den Spaltenüberschriften (ComponentTypes) besteht eine weitere Viele-zu-Eins-Beziehung. Im Moment habe ich so etwas wie dies meiner Meinung nach umgesetzt:Was ist die effizienteste Methode, um ein dünnes Dataset als Tabelle in Django anzuzeigen?
Reihen:
materials_list = Materials.objects.all()
Spalten:
component_type_list = Components.objects.filter(material__in = materials_list).values("component__name")
Festlegung der Werte für die Zeile in der Reihenfolge des Spaltentitels:
for material in materials:
component_list = []
for component_type in component_type_list:
try:
component = material.components_set.filter(component__name = component_type['component__name'])[0].weight_pct
except:
component = 0
component_list.append(component)
material.component_list_for_table = component_list
ich dann Materialien und component_type_list auf die Vorlage übergeben, wo ich t haben er folgt:
<table>
<thead>
<tr>
<th>Guru ID</th>
<th>Material</br>Code</th>
{% for component_type in component_type_list %}
<th>{{ component_type.component__name }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for material in materials %}
<tr>
<th>{{ material.GURU_ID }}</th>
<th>{{ material.MATERIALCODE }}</th>
{% for component in material.component_list_for_table %}
<td>{{ component|floatformat }}%</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
Selbst mit nur 50 Zeilen (potenziell ~ 100 Spalten) arbeitet dies extrem langsam. Gibt es einen effizienteren Weg?
Ich habe den Code bearbeitet, um es zu vereinfachen, damit es nicht perfekt sein kann.