我正在尝试学习Django和Web开发方面,并为自己设置了一些挑战,为流行动作RPG,流亡之路编写一些第三方工具。
任何ARPG的一个关键特征是收集可能具有任意数量“统计数据”的战利品,这些物品在模型中表示为ManyToManyField。我想在表格中列出一组项目及其统计数据。我知道如何在相关的template.html中使用HTML标签,但是如果可能的话,我想使用django_tables2,以减少重复等。
我玩了一下并阅读了文档和tables.html模板,但看不到明显的做法或找到任何其他帖子等,我很感激任何帮助或推动正确的方向。
Here is a mockup of what I'd like the table to look like我不太喜欢细胞分裂器,但是我希望能够对这些多个方面的列进行排序。
modely.py
class Stats(models.Model):
name = models.ForeignKey(StatNames, models.DO_NOTHING)
min_value = models.IntegerField()
max_value = models.IntegerField()
class ItemName(models.Model):
name = models.CharField(unique=True, max_length=50)
i_level = models.SmallIntegerField()
min_dmg = models.SmallIntegerField(blank=True, null=True)
max_dmg = models.SmallIntegerField(blank=True, null=True)
stats = models.ManyToManyField(Stats)
tables.py
class ItemTable(tables.Table):
class Meta:
model = poe.models.ItemName
print("ItemName.type", poe.models.ItemName.type)
fields = (
'name',
'i_level',
'stat_name',
'min_value',
'max_value',
)
这是我尝试的html方法的一个例子,变量名称与上面有点不同,但它展示了我的想法。
<table>
<thead>
<tr>
<th>Name</th>
<th>Something</th>
<th>Something Else</th>
<th colspan='3'>Stats!</th>
</tr>
</thead>
<tbody>
{% for obj in object_list %}
{% with obj.stats.count|default:1 as rowspan %}
<tr>
<td rowspan='{{rowspan}}'>{{obj.name}}</td>
<td rowspan='{{rowspan}}'>{{obj.something}}</td>
<td rowspan='{{rowspan}}'>{{obj.something_else}}</td>
{% for stat in obj.stats.all %}
<td>{{stat.name}}</td>
<td>{{stat.min_value}}</td>
<td>{{stat.max_value}}</td>
{% empty %}
<td colspan='3'>No stats</td>
{% endfor %}
</tr>
{% endwith %}
{% endfor %}
</tbody>
</table>