2012-08-16 82 views
0

我有一个表单从模型创建的数据库中获取值。假设我的表格有2列,城市和代码,并且使用ModelChoiceField在我的表单中显示城市。更改django表单值

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

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(): 

      ??????? 

我怎么能这样做?

谢谢 - 奥利

回答

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

+0

谢谢 - 这看起来像我需要在我的路上。我会看看文档,并尝试您的建议的答案.. – Oli 2012-08-16 08:17:06

+0

谢谢 - 这是工作.. – Oli 2012-08-17 19:26:11

0

我会覆盖窗体的保存方法。并改变那里的领域。这样,您仍然可以获得一个干净的视图,其中与表单相关的所有逻辑均保留在表单中。