【问题标题】:How to setup the initial value in select control?如何在选择控件中设置初始值?
【发布时间】:2015-08-12 18:50:44
【问题描述】:

我正在尝试在表单上设置select 控件,但未达到预期结果。对我来说,最奇怪的是它在以前的控件中工作,相同的类型。

这是涉及的功能:

class ProofMSPE(CrearEvidencia):
    model = VRL02
    form_class = VRL02Form

    def get_form(self, form_class):
        form = super(ProofMSPE, self).get_form(form_class)
        form.fields['miembro'].queryset = self.pipol
        if self.pipol.count() == 1:
            form.fields['miembro'].widget.initial = [self.pipol[0].id]
        form.fields['meta'].initial = self.meta
        form.fields['meta'].widget.attrs['disabled'] = True
        return form

meta 的控件是select,我得到了预期的行为,即自动选择一个初始值(form.fields['meta'].initial = self.meta,在接下来的几行中,它禁用了(form.fields ['meta']. widget.attrs ['disabled'] = True)。这是在渲染模板:

<!-- begin meta-->
<div class="row">
  <div class="col s12 input-field">
    <select id="id_meta" name="meta" disabled>
      <option value="">---------</option>
      <option value="1" selected="selected">JOCE-1</option>
      <option value="2">VEL-1</option>
      <option value="3">VEL-2</option>
      <option value="4">VEL-3</option>
    </select>
    <label for="id_meta">Evidencia para la meta</label>
  </div>
</div>
<!-- end ./meta -->

另一方面,使用 pipol 字段我无法获得相同的结果。顺便说一下,不同之处在于这个字段有一些逻辑:我得到了一个具有相同条件的人的过滤列表,并且小部件是在这个列表中创建的 (form.fields['miembro'].queryset = self.pipol)。

到目前为止一切顺利,但如果查询集只有 一个 结果 (if self.pipol.count () == 1 :) 我希望将其用作初始值 (form.fields ['member']. Widget.initial = [self .pipol [0] .id]),但这不起作用.

这是渲染模板时出现的内容:

<!-- begin pipol-->
<div class="row">
  <div class="col s12 input-field">
    <select id="id_miembro" name="miembro">
      <option value="" selected="selected">---------</option>
      <option value="2">***@***.mx</option>
    </select>
    <label for="id_miembro">Seleccione el usuario</label>
  </div>
</div>
<!-- end ./pipol -->

感谢您的宝贵时间。

【问题讨论】:

  • 为此目的创建您的自定义小部件(继承自 django.forms.Select

标签: django django-forms django-widget


【解决方案1】:

您必须将初始值设置为form.field['miembro'] 而不是小部件,就像您对form.fields['meta'] 所做的那样。

def get_form(self, form_class):
    form = super(ProofMSPE, self).get_form(form_class)
    form.fields['miembro'].queryset = self.pipol
    if self.pipol.count() == 1:
        # this line here
        form.fields['miembro'].initial = self.pipol[0]
    form.fields['meta'].initial = self.meta
    form.fields['meta'].widget.attrs['disabled'] = True
    return form

选择输出将是:

<select id="id_miembro" name="miembro">
  <option value="">---------</option>
  <option value="2" selected="selected">***@***.mx</option>
</select>

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多