Django重组使用组

时间:2015-05-31 03:18:10

标签: django templates group-by

所以我有这个

|元素|品牌|       1       B 2       C 2       D 1

我如何对它们进行分组以使品牌不再重复,我的意思是我不想两次展示品牌,我想将每个品牌渲染一次。 注意:品牌是外键

------------------------编辑---------------------- -----

class Productos(models.Model):
    modelo = models.CharField(max_length=50)
    tipo = models.ForeignKey("TiposOpciones", null=True, blank=True, related_name='Productos_tipo')
    marca = models.ManyToManyField(MarcasOpciones, related_name='Productos_marca')

我想只展示一次马卡场,而不是重复它。我试过了,但它正在重复它:

                {% for sth in productos.all %}
                {% ifequal articulo.Tipos|slugify sth.tipo|slugify %}
                <li>
                    <a href="#">
                            {% for sthelse in sth.marca.all %}

                                {{ sthelse }}

                            {% endfor %}
                    </a>
                </li>
                {% endifequal %}
            {% endfor %}

那我应该如何分组?

1 个答案:

答案 0 :(得分:0)

查看您的代码我认为您希望通过marcas显示与某些articulo相关的所有product.type。对于这种情况,我认为您不需要进行任何分组,您可以找到您感兴趣的所有marcas。这就是我的意思:

#in the view
#add .distinct() if you get duplicates
marcas = MarcasOpciones.object.filter(Productos_marca__tipo=articulo.Tipos) 

#in the template
{% for sthelse in marcas %}
    <li><a href="#">{{ sthelse }}</a></li>
{% endfor %}

这种方法有一个可能的缺点 - 我们没有使用|slugify标记来创建匹配。对此可能的解决方案是为两个模型创建slug字段。

然而,如果这种方法并不适合你。我建议您移动视图中的所有匹配逻辑,然后再次仅在模板中发送所需的marcas

#in the view
from django.template.defaultfilters import slugify

marcas = []
for sth in productos.all():
    if slugify(articulo.Tipos) == slugify(sth.tipo):
        for sthelse in sth.marca.all():
            if sthelse not in marcas:
                marcas.append(sthelse)
                #if you need the product that match that marca
                #you can add it here
                #sthelse.product = sth