【问题标题】:Filtering data based on a condition in django template根据django模板中的条件过滤数据
【发布时间】:2021-04-21 15:20:37
【问题描述】:

我想根据 django 模板中的条件计算对象总数。假设我的模型如下:

class Vote(models.Model):
    election = models.ForeignKey(Election, on_delete=models.CASCADE)
    candidate = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
    voting_booth = models.ForeignKey(Booth, on_delete=models.CASCADE)

这里我想要基于每个投票展位的总票数。我可以在视图中对其进行过滤,但希望在其各自的展位上显示所有投票。

模板是:

{% for v in vote %}
        <div class="col-md-6 col-sm-6 col-lg-6 col-xl-4">
            <div class="dash-widget" style="box-shadow: 5px 5px lightblue;">
                <div class="dash-widget-info">
                    <h5>Total Voters:{{v.**???**.count}}</h5>
                    <h5>Voting Booth:{{v.voting_booth}}</h5>
                    <h5>Total Vote Earned:{{v.**???**.count}}</h5>
                </div>
            </div>
        </div>
{% endfor %}

提前致谢..

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    如果我理解得很好:

    我会迭代Voting Booth 而不是Votes,并在将voting_booth 的查询集返回到模板之前让总选民做这样的事情:

    qs = Booth.objects.annotate(votes_count=Count("vote_set"))
    

    然后在模板中:

    {% for b in qs %}
            <div class="col-md-6 col-sm-6 col-lg-6 col-xl-4">
                <div class="dash-widget" style="box-shadow: 5px 5px lightblue;">
                    <div class="dash-widget-info">
                        <h5>Total Voters:{{ b.votes_count }}</h5>
                        <h5>Voting Booth:{{ b }}</h5>
                    </div>
                </div>
            </div>
    {% endfor %}
    

    此外,您可以像这样过滤 Count:

    qs = Booth.objects.annotate(votes_count=Count("vote_set", filter=Q(vote_set__election__date__year=2021) & Q(vote_set__candidate__name="a name")))
    

    【讨论】:

    • 但我在 Booth 模型中没有投票外键。相反,外键在 Vote 模型中。
    • 当你有一个ForignKey 字段时,django 会自动设置一个反向关系,这就是为什么我把vote_set 放在 Count 里面
    • 您也可以将反向关系的名称从vote_set更改为votes,如下所示:voting_booth = models.ForeignKey(Booth, on_delete=models.CASCADE, related_name="votes"),然后将查询更改为:qs = Booth.objects.annotate(votes_count=Count("votes"))
    • oo。对不起这个愚蠢的问题。是的,投票模型中有一个外键。是的,现在解决了。感谢您的帮助。
    • 对不起,再次。我怎样才能获得获胜者,谁在每次选举和职位上获得最大票数??
    猜你喜欢
    • 1970-01-01
    • 2018-10-08
    • 2022-09-29
    • 2012-12-21
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多