我正在窗体中手动呈现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>
谢谢!
答案 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})