Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试访问Django模板中的ModelForm字段modelChoice选项_Django_Django Forms_Django Templates - Fatal编程技术网

尝试访问Django模板中的ModelForm字段modelChoice选项

尝试访问Django模板中的ModelForm字段modelChoice选项,django,django-forms,django-templates,Django,Django Forms,Django Templates,我正在生成模型表单,并希望对它们在模板中的输出方式进行精确控制。具体来说,我需要在每个选择列表中的每个单选按钮的末尾添加一些标记 代码: 我很惊讶这是如此具有挑战性 好处:我启用了DEBUG=True和Django调试工具栏。是否可以将变量转储到浏览器中,以便在深入查看时看到这些内容 谢谢 我不得不做一些类似的事情,也开始走这条路。我想从ModelChoiceField创建表行,其中每个列都有模型实例的不同字段(然后我允许通过JavaScript过滤表行) {% for choice in fo

我正在生成模型表单,并希望对它们在模板中的输出方式进行精确控制。具体来说,我需要在每个选择列表中的每个单选按钮的末尾添加一些标记

代码:

我很惊讶这是如此具有挑战性

好处:我启用了DEBUG=True和Django调试工具栏。是否可以将变量转储到浏览器中,以便在深入查看时看到这些内容


谢谢

我不得不做一些类似的事情,也开始走这条路。我想从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 %}