如何比较 Django 模板中的两个查询集?

Posted

技术标签:

【中文标题】如何比较 Django 模板中的两个查询集?【英文标题】:How to compare two querysets in Django templating? 【发布时间】:2017-12-16 04:27:22 【问题描述】:

这听起来可能与其他关于使用 zip 和其他选择比较两个查询集的帖子非常相似,但我已经阅读了很多,但没有一个让我知道我可以为我需要的比较做些什么。

首先,我从数据库中获取查询,并且在 html 模板中我需要为 select 元素生成一些默认值。使用一个默认值很容易,但是使用 multiple 我遇到了麻烦,因为 Django 模板中没有 break

假设我有两个从后端返回的查询集:

[<J: j1>, <J: j2>, <J: j3>, <J: j4>]
[<J: j2>, <J: j4>]

我一开始就尝试过这样的事情,我可以理解它循环的次数超出了需要,所以我得到的输出也比需要的多。我尝试搜索会破坏循环的东西,但我认为 Django 模板中没有破坏循环。

<select name="" id="">
    % for j in all_j %
        % for s in all_s %
            % if j.id == s.id %
                <option value=" j.id " selected="selected"> j.name </option>
            % else %
                <option value=" j.id "> j.name </option>
            % endif %
        % endfor %
    % endfor %
</select>

我尝试了其他方法,例如

<select name="" id="">
    % for s in all_s %
        % if s in all_j %
            <option value=" j.id " selected="selected"> j.name </option>
        % else %
            <option value=" j.id "> j.name </option>
        % endif %
    % endfor %
</select>

然后我想它只有在它为真时才会得到输出,else 中的东西不会运行。

有人可以给我一个想法或知道我可以在这种情况下做什么吗?

以下是我想要实现的目标。

【问题讨论】:

我不会提供这个作为答案,因为它不完全符合您的要求,但作为设计选择,我非常考虑将其移至模板标签 (@ 987654322@) 或者只是在您的视图代码中执行它并在模板上下文中提供结果。 如果你真的想在模板中做这个,那就制作你自己的模板过滤器,pfinn.net/custom-django-filter-tutorial.html 【参考方案1】:

试试这个:

views.py

from django.shortcuts import render


def home(request):
    context = 
        'all_s': ['j1', 'j2', 'j3', 'j4'],
        'all_j': ['j2', 'j4']
    
    return render(request, 'index.html', context)

index.html

<html>
<header>
    <title></title>
</header>
<body>
<select name="bla" id="" multiple style="width: 200px;">
    % for s in all_s %
        % if s in all_j %
            <option value=" s " selected="selected"> s </option>
        % else %
            <option value=" s "> s </option>
        % endif %
    % endfor %
</select>
</body>
</html>

结果:

【讨论】:

arg,难怪你提到我的解决方案应该有效。我把自己弄乱了变量名>。

以上是关于如何比较 Django 模板中的两个查询集?的主要内容,如果未能解决你的问题,请参考以下文章

带有字段比较结果的django注释查询集

如何获取与传递给 Django 模板的查询集相关的查询集对象

如何复制查询集Django

如何比较 Django 模板中的日期

如何比较 Django 模板中的 IntegerChoice 值

如何比较两个for循环的值并在django模板中使用if语句?