0

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

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

模型.py

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

    def __unicode__(self):
        return self.city

表格.py

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

视图.py

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

            ???????

我怎么能这样做?

谢谢 - 奥利

4

2 回答 2

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

于 2012-08-16T07:49:35.673 回答
0

我会覆盖表单的保存方法。并改变那里的领域。这样,您仍然会有一个清晰的视图,其中与表单相关的所有逻辑都包含在表单中。

于 2012-08-16T09:22:04.590 回答