所以我有这个
|元素|品牌| 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 %}
那我应该如何分组?
答案 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