我有一个表单,它从模型创建的数据库中获取值。说我的表有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
答案 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()
答案 1 :(得分:0)
我会覆盖表单的save方法。并改变那里的领域。这样你仍然可以看到一个干净的视图,其中与表单相关的所有逻辑都保留在表单中。