Django:带有带注释的查询集的表格ModelMultipleChoiceField

时间:2019-08-02 17:46:14

标签: django django-forms

我正在尝试在表单中进行多项选择。我不想使用完整的查询集,而是要注释一些值。

注释

productos_incluir = ProductosBase.objects\
    .filter((Q(region__region__icontains="Argentina") | Q(region__region__icontains="Todas")) & Q(estatus_contenido__id__gt=2))\
    .values("marca__marca", "producto", "packaging").annotate(variantes=Sum("producto"))\
    .order_by("marca__marca", "producto", "packaging")

表单字段

productos = forms.ModelMultipleChoiceField(
    widget=forms.CheckboxSelectMultiple, queryset=productos_incluir, required=False)

视图

<div>{{ filter_form.productos }}</div>

结果

我在视图中显示了列表,但是在复选框旁边得到了“标签”,如下所示:

  

{'marca__marca':'Cramer','producto':'Cutter-Shark','packaging':   “ Bolsa个人”,“变体”:0.0}

我的愿望

我想要的是能够显示没有字段信息的标签。我想这与注释时查询集类型的变化有关,但是我找不到如何显示它。

  

填字游戏|切刀-Shark Bolsa |个人

提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,也许这就是您想要的:

您的查询集提供字典,因此您必须使用.items

进行迭代
{% for key, value in your_dict.items %}
   {{ key }} = {{ value }}
{% endfor %}

所以在您的情况下:

<p>
{% for key, value in filter_form.productos.items %}
   {{ value }} {% if not forloop.last %}|{% endif %} 
{% endfor %}
</p>