【问题标题】:Separating ManyToManyFields in a template在模板中分离 ManyToManyFields
【发布时间】:2009-10-13 18:55:44
【问题描述】:

link text 提出问题后,我想使用内部、外部、机械等类别将模板中的特征分开。

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

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

我该怎么做?

【问题讨论】:

    标签: django django-templates


    【解决方案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)
    

    什么的。

    【讨论】:

    • 顺便说一句...只是想知道在我渲染到模板之前有没有办法在我的视图中执行此操作?
    • 你是救生员...谢谢。如果可以的话,我会再次投票:)
    • 如何使用相同的方法显示 feature_sets 字段?我尝试了同样的方法,但是对于 feature_sets,我得到的只是 -'ManyRelatedManager' 对象没有属性 'features' features 和 feature_sets 字段也出现在 CommonVehicle 类中,但它们在模板中被完全跳过
    • 不清楚你的feature_set经理来自哪里。 feature_setfeatures 有何不同?无论如何,您的错误消息告诉您它是ManyRelatedManagerfeatures 也是如此,所以同样对待它。
    • @jcd 我设法解决了这个问题......只是我的一个小错字:)
    【解决方案2】:

    使用 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 %}
    

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 2020-10-16
      • 2016-04-22
      • 2012-03-11
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      相关资源
      最近更新 更多