【问题标题】:initial value for django form choice field ignoreddjango 表单选择字段的初始值被忽略
【发布时间】:2013-04-06 04:04:23
【问题描述】:

我有这个表格:

class UserUsesSourceForm(forms.Form):
    # some fields here
    username = forms.CharField(label=("Username"), max_length=30, help_text = ("Required"))
    provider = forms.ChoiceField(widget=forms.Select(), choices=SOURCES_CHOICES, initial=SOURCES_CHOICES[1])

可用的选择是:

E = 'e'
A = 'a'
SOURCES_CHOICES = (
                  (A, 'A'),
                  (E, 'E'),
                  )

观点:

form = UserUsesSourceForm(initial={"username":request.user.username, 'provider':SOURCES_CHOICES[1]})return render_to_response('update_datasource.html', context_instance=RequestContext(request, params))

还有模板:

<form action="" method="post">
    {% csrf_token %}
    {% if form.non_field_errors %}
    <p>
        {% for error in form.non_field_errors %}
            <div class="text-error">{{ error|escape }}</div>
        {% endfor %}
    </p>
    {% endif %}
    <div class="control-group">

        <label class="control-label" for="id_provider">Data source</label>
        <div class="controls">
            {{form.provider}}
        </div>
                </div>
</form>

问题是即使初始值设置正确,并且我可以在调试中测试它(即表单“提供者”字段初始值是我想要的元组),最终的html总是显示第一个元素选择框:

<select name="provider" id="id_provider">
<option value="A">A</option>
<option value="E">E</option>
</select>

..虽然我希望它有一个“默认”或“活动”选项。 请注意 username 字段已正确初始化。 如何进一步调查以找出问题所在?

【问题讨论】:

    标签: django forms django-templates choice


    【解决方案1】:

    您需要传递option 值而不是initial 数据中的元组:

    form = UserUsesSourceForm(
        initial={'username':request.user.username,
                 'provider':SOURCES_CHOICES[1][0]})
    

    【讨论】:

    • 如果你想根据视图的参数动态传递选择怎么办?
    • 这是个好问题。这就是我今天陷入的困境。你有什么解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多