表单form.is_valid()= False并重新加载表单时,字段值丢失

时间:2019-01-02 22:26:11

标签: django django-forms

我正在窗体中手动呈现ModelChoiceField,以便可以在每个选项上插入自定义属性。如果出现任何形式的表单域错误导致无法提交,则在重新加载页面时,用户输入/选择的数据将丢失(即,字段值恢复为第一次加载页面时的值)。我想知道当表单错误迫使页面/表单重新加载时,如何防止丢失此信息。 注意:这只会影响以下面所示方式手动呈现的字段。

forms.py

self.fields['formpricing'].choices = ZERO_BLANK_CHOICE + tuple([(t.id, t) for t in FormPricingMethod.objects.filter(industryname=industry)])
self.fields['formpricing'].queryset = FormPricingMethod.objects.filter(industryname=industry)

views.py

formpricing = userprofile.formpricing 
form = BasisOfPricingForm(request.POST or None, user=user, initial={'formpricing': formpricing})

模板

<select name="formpricing" required="" id="id_formpricing">

{% for value, object in form.formpricing.field.choices %}

   <option 
          typenumber="{{object.typenumber}}" 
          value="{{value}}"
          {% if form.formpricing.initial.id == value %}
               selected
          {% endif %}

    >
      {{object.title}}
  </option>

 {% endfor %} 

</select>

谢谢!

1 个答案:

答案 0 :(得分:-1)

弄清楚了。在form.is_valid == False部分中,您必须

a)从表单中获取字段值。如果try语句的formpricing字段包含无效值并且是表单验证失败的原因,则需要使用try语句。

        try:
            formpricing = form3.cleaned_data['formpricing']
        except:
            pass

b)重新初始化表格

form = BasisOfPricingForm(request.POST or None, user=user, initial={'formpricing': formpricing})