django_tables2 ManyToMany列

时间:2017-03-21 21:03:08

标签: python django django-tables2

我正在尝试学习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>

0 个答案:

没有答案