从django 1.6中的POST表单访问信息

时间:2014-06-26 16:20:14

标签: django python-2.7 django-models django-forms

我有几种形式,一种是作为ModelForm创建的,另一种是简单的Form。它们都在request.POST中使用,并且从我们那里获取信息我使用不同的方法:

对于ModelForm表单,我这样做:

form = ApplicantForm(request.POST)
if form.is_valid():
    applicant = form.save(commit=False)
    applicant.confirmation_code = '999999'
    applicant.save()

对于简单表格,我正在使用:

form = ConfirmationCode(request.POST)
code = request.POST['confirmation_code']
confirmation_id=request.POST['confirmation_id']

正如您所看到的,要以第一种形式访问信息,我正在使用" form.save.ANYFIELD",而对于我正在使用的第二种形式#34; request.POST [& #39; ANYFIELD&#39]。是否可以使用request.POST方法访问第一个表单中的信息,即使它尚未保存?哪个更好?

2 个答案:

答案 0 :(得分:2)

你可以尝试这样的模型:

form = ApplicantForm(request.POST)
if form.is_valid():
   app_code= form.cleaned_data['confirmation_code'] #assuming confirmation_code is a field in your modelform
   .....

答案 1 :(得分:0)

你似乎对某个模型中的保存工作有点困惑。当您调用form.save()时,您正在创建与表单关联的模型的新实例,并且(除非您指定commit=False)将该数据保存到数据库。因为您有一个实例,所以可以使用任何常规模型实例方法和访问模式。

如果你想使用没有关联模型的表单,你不能调用save - 因为没有什么可以保存,也没有模型来创建实例 - 但你应该通过{访问数据致电form.cleaned_data后的{1}}字典。这是因为form.is_valid()中的数据已根据表单中的规则进行了验证,并在必要时转换为相关类型:例如,如果您的表单中有一个名为cleaned_data的IntegerField,{ {1}}将是my_number之类的字符串,但request.POST['my_number']将是实际的整数"3"