Django过滤模板中的模型

cld4siwp  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(144)

我希望能够过滤模板中的模型(或找到不同的解决方案来解决我的问题)。相关模型如下所示:

class CommissionElection(models.Model):
    title = models.CharField(max_length=64)
    commission = models.ManyToManyField(Commissie, related_name="elections")

class ElectablePerson(models.Model):
    commission = models.CharField(max_length=128)
    election = models.ManyToManyField(CommissionElection, related_name="electables")

class Commissie(models.Model):
    commissie = models.CharField(max_length=64)

在这里,Commissie是来自不同应用程序的模型。
我已经为一个特定的选举创建了一个页面,现在我想在该页面上列出每个委员会的名单,其中列出了所有声明自己可以当选该委员会(和该选举)的ElectablePersons。
我在我的模板中尝试了以下操作:

{% for commission in election.commission.all %}
{{ commission }}
  {% for electable in election.electables.filter(commission=commission) %}
    {{ electable}}
  {% endfor %}
{% endfor %}

这给出了错误
无法分析其余部分:'(commission = commission)'来自'election. electables. filter(commission = commission)'
我是否可以过滤模板中的模型,或者是否有其他方法可以做到这一点?

k97glaaz

k97glaaz1#

您可以简单地将过滤器函数移动到模型定义中。

class Commissie(models.Modle):
    commissie = models.CharField(max_length=64)

    def electables(self):
        return ElectablePerson.objects.filter(election__commission=self)

然后在模板中,调用定义的方法和循环

{% for commission in election.commission.all %}
  {{ commission }}
  {% for electable in commission.electables %}
    {{ electables }}
  {% endfor %}
{% endfor %}
  • —-
    更新:使用自定义模板过滤器
    在应用程序目录下创建一个templatetags目录,然后在其中创建electables.py文件
# app/templatetags/electables.py
from django import template
register = template.Library()

@register.filter
def electables(election, commission):
    return election.electables.filter(commission=commission)

然后在您的模板中

{% load electables %}

{% for commission in election.commission.all %}
  {{ commission }}
  {{ for electable in election|electables:commission }}
    {{ election }}
  {% endfor %}
{% endfor %}

相关问题