使用带有非字符串对象的表单

时间:2011-12-05 07:54:56

标签: django django-forms

我有非常复杂的表单项;)

以下是我提供表格的观点:

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”。当我最初使用初始数据渲染我的模板时,事情看起来很好,但是当验证失败时,事情会变得混乱。我该怎么办,我做错了什么?

1 个答案:

答案 0 :(得分:1)

只需将ModelChoiceField用于country字段。

不要忘记定义模型的__unicode__方法。