我有非常复杂的表单项;)
以下是我提供表格的观点:
def view(request):
if request.method == "POST":
form = forms.ProfileEditForm(request.POST)
else:
form = forms.ProfileEditForm(initial={'country': request.user.profile.country})
return direct_to_template(request, "name/of/template.html",
{"form": form, "countries": Country.objects.all()})
以下是乡村模型的样子:
class Country(models.Model):
iso2 = models.CharField()
iso3 = models.CharField()
name = models.CharField()
这是我的表单的clean()方法看起来像(高度简化):
def clean(self):
self.cleaned_data['country'] = Country.objects.get(iso2=self.cleaned_data['country'])
return self.cleaned_data
以下是我在模板中呈现它的方式:
<select name="country"{% if form.country.value %} data-initialvalue="{{form.country.value.iso2}}"{% endif %}>
{% for country in countries %}
<option value="{{country.iso2}}"{% if country.iso2==form.country.value.iso2 %} selected{% endif %}>{{country.name}}</option>
{% endfor %}
</select>
但是,我注意到实际上最终传递给我的模板的不是Country
对象,而是一串输入数据,例如“US”。当我最初使用初始数据渲染我的模板时,事情看起来很好,但是当验证失败时,事情会变得混乱。我该怎么办,我做错了什么?