django 如何手动呈现表单选项

x759pob2  于 2023-01-06  发布在  Go
关注(0)|答案(2)|浏览(112)

我有form.py

SELECT_PRODUCT = [
    ('item1', 'item1'),
    ('item2', 'item2'),
    ('item3', 'item3'),
    ('item4', 'item4'),
]

class OrderBonus(forms.Form):
    select_product = forms.CharField(widget=forms.Select(choices=SELECT_PRODUCT ))

在html中,我需要单独呈现每个选项:

<select name="{{ form_bonus.select_product .name }}">
    <option value="{{form_bonus.select_product.field.choice.0}}">{{form_bonus.select_product.field.choice.0}}</option>
    <option value="{{form_bonus.select_product.field.choice.1}}">{{form_bonus.select_product.field.choice.1}}</option>
    <option value="{{form_bonus.select_product.field.choice.2}}">{{form_bonus.select_product.field.choice.2}}</option>
 </select>

我尝试不同的方法:1)一个月一次x 2)一个月一次x 3)一个月二次x
我尝试迭代:

{% for choice in form_bonus.select_product.field.choices %}
    {{ choice }}
{% endfor %}

{% for value, text in form_bonus.select_product.field.choices %}
    {{ value}} - {{ text }}
{% endfor %}

任何人都知道如何覆盖选择小部件来使用每个选项:form_bonus.select_product.field.choice.0
Python 3.5.2和Django 1.10

roejwanj

roejwanj1#

试试这个:

<select name="{{ form_bonus.select_product.name }}">
    {% for choice in form_bonus.select_product.field.choices %}
        <option value="{{ choice.0 }}">{{ choice.1 }}</option>
    {% endfor %}
</select>

但是要确保使用ChoiceField而不是CharField

class OrderBonus(forms.Form):
    select_product = forms.ChoiceField(choices=SELECT_PRODUCT)

如果需要,您可以简单地编写{{ form_bonus.as_p }}而不是loop。

cnwbcb6i

cnwbcb6i2#

如果你想手动渲染一个choicefield,并且用正确的选择正确地渲染它,你最好使用subwidgets属性来代替,但是在这个例子中,这并不是完全手动完成的!

<select name="{{ form_bonus.select_product.name }}">
    {% for widget in form_bonus.select_product.subwidgets %}
        {{ widget }}
    {% endfor %}
</select>

相关问题