python - Django/Python - 将数据收集到正确的形式(算法)

标签 python django algorithm sorting django-templates

我有这样的模型:

Item:
    name
    desc

AttrGroup:
    name
    order

AttrName:
    name
    group.ForeinKey(AttrGroup)
    order

AttrVal:
    value
    attr.ForeinKey(AttrName)
    item.ForeinKey(Item)

所以我想比较列表items_id=[1,3,7,...]中n项的属性

在 View 中,我做了这样的事情:

attrs = AttrVal.object.filter(item__id__in=items_id)

并发送到模板。但是我会对如何安排界面列表的方式感到困惑。

模板应该是这样的:

<table>
    {% for g in group %}
        <tr class="group_name">{{ g.name }}</tr>
        {% for a in attrs %}
        <tr>
            <td>{{ a.name }}</td>
            {% for i in items_id %}
                <td>{{ value of item 'i' }}</td>
            { %endfor %}
        </tr>
        {% endfor %}
    {% endfor %}
</table>

我认为它会很好的解决这个问题。谢谢!

更新: 按照@Lott 的漂亮解决方案,我找到了如何将数据显示到模板的方法。我正在使用这样的代码:

{% for g in groups %}
    <tr class="title_row">
        <td class="group_name" colspan="{{ no_items }}">{{ g.0 }}</td>
    </tr>

    {% for a in g.1 %}
    <tr>
        <td>{{ a.attr.name }}</td>
        {% for i in comparing_items %}
            <td>{% if a.item.id == i %}{{ a.value }}{% endif %}</td>
        {% endfor %}
    </tr>
    {% endfor %}
{% endfor %}

它出现了:

<table>
    <tr>
        <td>Attr Name 1</td>
        <td>Attr Value of Item 1</td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td>Attr Name 2</td>
        <td>Attr Value of Item 1</td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td>Attr Name 1</td>
        <td></td>
        <td></td>
        <td></td>
        <td>Attr Value of Item 4</td>
    </tr>
</table>

我的目标是在同一行中列出项目 [1,2,3,...] 的相同属性。 HTML 应该是这样的:

<table>
    <tr>
        <td>Attr Name 1</td>
        <td>Attr Value of Item 1</td>
        <td>Attr Value of Item 2</td>
        <td>Attr Value of Item 3</td>
        <td>Attr Value of Item n</td>
    </tr>
    <tr>
        <td>Attr Name 2</td>
        <td>Attr Value of Item 1</td>
        <td>Attr Value of Item 2</td>
        <td>Attr Value of Item 3</td>
        <td>Attr Value of Item n</td>
    </tr>
    <tr>
        <td>Attr Name m</td>
        <td>Attr Value of Item 1</td>
        <td>Attr Value of Item 2</td>
        <td>Attr Value of Item 3</td>
        <td>Attr Value of Item n</td>
    </tr>
</table>

非常感谢!

最佳答案

在您的 View 函数中,您可以找到 attrs 查询集中每个 AttrValue 的 AttrName 和 AttrGroup。您在 View 函数中创建相关 组。然后在模板中显示详细信息。

groups = defaultdict( list )
for a in attrs:
    groups[a.attr.group.order, a.attr.group.name].append( a )

group_list = [ (name[1], groups[name]) for name in sorted( groups.keys() ) ]

您的模板将如下所示

<table>
    {% for g in group_list %}
        <tr class="group_name">{{ g.0 }}</tr>
        {% for a in g.1 %}
        <tr>
            <td>{{ a.name }}</td>
            {% for i in a.item %} <!-- Yes, you can refer to methods of model objects. -->
                <td>{{ i }}</td>
            { %endfor %}
        </tr>
        {% endfor %}
    {% endfor %}
</table>

关于python - Django/Python - 将数据收集到正确的形式(算法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5832143/

相关文章:

python - 在 Django 中获取按月分组的结果

algorithm - 切割信号(相互关联)并计算这些部分

javascript - 算法:根据一个更改数组的所有值并保持相同的总和

Python pdf2txt 清理问题

python - Python 的类闭包是如何工作的?

python - 在 mysql 表中查询动态列名及其在 python 中的值?

python - Django 2.2.1的运行服务器给出了循环导入错误,而不是显示实际错误

python - Django 应用程序中的 UnicodeEncodeError

python - 使用 PyGitHub 和 PyGit2 创建、克隆并推送到 GitHub 存储库

algorithm - 动态规划还是回溯?