在模板中分隔ManyToManyFields

时间:2009-10-13 18:55:45

标签: django django-templates

link text处跟随我的问题,我想使用内部,外部,机械等类别分离模板中的功能。

我正在尝试下面的代码,但显然它并没有给我我想要的东西。

{% for feature in vehicle.features.all %}
    {% ifequal vehicle.features.type.type "Interior" %}
    <li>{{ feature }}</li>
    {% endifequal %}
{% endfor %}

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你想:

{% for feature in vehicle.features.all %}
    {% ifequal feature.type.type "Interior" %}
        <li>{{ feature }}</li>
    {% endifequal %}
{% endfor %}

vehicle.features是ManyToManyRelatedManager,可用于访问Feature个对象,但实际上并不包含Feature的关系。

编辑:在回复下面关于在视图上执行此操作的评论时,您可以轻松地执行以下操作:

interior_features = vehicle.features.filter(type__type='Interior')

并将interior_features直接传递给模板的上下文。这实际上更适合作为模型的方法:

def get_interior_features(self):
    return self.features.filter(type__type='Interior')

当然,可以根据需要进一步筛选此结果。

options = vehicle.get_interior_features().filter(is_standard=False)

或其他什么。

答案 1 :(得分:0)

使用Django的重组标记:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#regroup

可能最终会看起来像:

{% regroup vehicle.features.all by type as vehicle_features %}

{% for feature in vehicle_features %}
  {% ifequal feature "Interior" %}
     <li>{{feature}}</li>
  {% endifequal %}
{% endfor %}