更改django表单值

时间:2012-08-16 07:43:49

标签: django forms

我有一个表单,它从模型创建的数据库中获取值。说我的表有2列,城市和代码,我使用ModelChoiceField显示我的表单中的城市。

当使用提交表单并且我正在完成验证过程时,我想用它的代码更改用户选择的城市的值。

models.py

class Location(models.Model):
    city                = models.CharField(max_length=200)
    code                = models.CharField(max_length=10)

    def __unicode__(self):
        return self.city

forms.py

city = forms.ModelChoiceField(queryset=Location.objects.all(),label='City')

views.py

def profile(request):
    if request.method == 'POST':
        form = ProfileForm(request.POST)
        if form.is_valid():

            ???????

我怎么能这样做?

谢谢 - Oli

2 个答案:

答案 0 :(得分:3)

你可以这样做:

def profile(request):
if request.method == 'POST':
    form = ProfileForm(request.POST)
    if form.is_valid():
        profile = form.save(commit=False)

        #Retrieve the city's code and add it to the profile
        location = Location.objects.get(pk=form.cleaned_data['city'])

        profile.city = location.code
        profile.save()

但是,您应该能够在ModelChoiceField中直接设置代码。检查here和django docs

答案 1 :(得分:0)

我会覆盖表单的save方法。并改变那里的领域。这样你仍然可以看到一个干净的视图,其中与表单相关的所有逻辑都保留在表单中。