我有几种形式,一种是作为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方法访问第一个表单中的信息,即使它尚未保存?哪个更好?
答案 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"
。