尝试访问Django模板中的ModelForm字段modelChoice选项
我正在生成模型表单,并希望对它们在模板中的输出方式进行精确控制。具体来说,我需要在每个选择列表中的每个单选按钮的末尾添加一些标记 代码: 我很惊讶这是如此具有挑战性 好处:我启用了DEBUG=True和Django调试工具栏。是否可以将变量转储到浏览器中,以便在深入查看时看到这些内容尝试访问Django模板中的ModelForm字段modelChoice选项,django,django-forms,django-templates,Django,Django Forms,Django Templates,我正在生成模型表单,并希望对它们在模板中的输出方式进行精确控制。具体来说,我需要在每个选择列表中的每个单选按钮的末尾添加一些标记 代码: 我很惊讶这是如此具有挑战性 好处:我启用了DEBUG=True和Django调试工具栏。是否可以将变量转储到浏览器中,以便在深入查看时看到这些内容 谢谢 我不得不做一些类似的事情,也开始走这条路。我想从ModelChoiceField创建表行,其中每个列都有模型实例的不同字段(然后我允许通过JavaScript过滤表行) {% for choice in fo
谢谢 我不得不做一些类似的事情,也开始走这条路。我想从ModelChoiceField创建表行,其中每个列都有模型实例的不同字段(然后我允许通过JavaScript过滤表行)
{% for choice in form.field.choices %} {# <-- Help me out here #}
{{ choice.id }}
{{ choice.title }}
{% endfor %}
我在Django文档中找不到它,但快速阅读Django源代码就知道了方法。您可以访问queryset以访问模型实例,如下所示:
<form action="{% url 'some_view' %}" method="post">
{% csrf_token %}
{% if form.non_field_errors %}
{{ form.non_field_errors }}
{% endif %}
{% for field in form %}
{{ field.label }}
{% if field.field.choices %}
{% for model_instance in field.field.choices.queryset %}
{{ model_instance.id }}
{% endfor %}
{% else %}
{{ field }}
{% endif %}
{% if field.errors %}
{{ field.errors|striptags }}
{% endif %}
{% endfor %}
<button type="submit">Submit</button>
</form>
{%csrf_令牌%}
{%if form.non_字段_错误%}
{{form.non_field_errors}}
{%endif%}
{%形式的字段为%}
{{field.label}
{%if field.field.choices%}
{field.field.choices.queryset%中的模型_实例的%
{{model_instance.id}
{%endfor%}
{%else%}
{{field}}
{%endif%}
{%if field.errors%}
{{field.errors | striptags}}
{%endif%}
{%endfor%}
提交
然而,现在我们已经分解了这个闪亮的小部件(在我的例子中是一个CheckboxSelectMultiple),必须使用模板代码重新组装HTML表单输入。我找不到直接的方法来同时迭代ModelChoiceField以访问模型实例字段并获取选项的HTML表单标记
也许有办法,但我放弃了我的尝试,构建了自己的HTML表单,在一个视图中处理所有POST数据。这样就容易多了。ModelForms确实很好,也很方便,但是将它们用于构建它们所不需要的东西最终会变得更加困难
我想我会把这篇文章贴出来,以防有人因为其他原因试图这么做。希望能有帮助。很晚了,但我现在正在阅读,这就是它对我的作用
{%用于表单%]中的字段
{%x,y在field.field.choices%}
{{x}
{{y}
{%endfor%}
{%endfor%}
您可以访问每个选项的基础模型实例:
{% for choice, label in form.field_name.field.choices %}
{{ choice.value }}
{{ choice.instance }}
{{ choice.instance.instance_attribute }}
{{ label }}
{% endfor %}
我想
{%for id,title in field.choices%}
,但为什么不使用自定义小部件{{field}}
?如果需要自定义输出,请编写自定义小部件…:-)是的,一个定制的小部件可能是最重要的,但是这也不起作用。在这里发布之前,我尝试了很多组合。我想我只需编写一个自定义小部件并在那里生成我的标记
{% for choice in form.field.choices %} {# <-- Help me out here #}
{{ choice.id }}
{{ choice.title }}
{% endfor %}
{% for field in form.fields %}
{% for choice in field.choices %}
<form action="{% url 'some_view' %}" method="post">
{% csrf_token %}
{% if form.non_field_errors %}
{{ form.non_field_errors }}
{% endif %}
{% for field in form %}
{{ field.label }}
{% if field.field.choices %}
{% for model_instance in field.field.choices.queryset %}
{{ model_instance.id }}
{% endfor %}
{% else %}
{{ field }}
{% endif %}
{% if field.errors %}
{{ field.errors|striptags }}
{% endif %}
{% endfor %}
<button type="submit">Submit</button>
</form>
{% for choice, label in form.field_name.field.choices %}
{{ choice.value }}
{{ choice.instance }}
{{ choice.instance.instance_attribute }}
{{ label }}
{% endfor %}