在Django表单中访问POST数据
我一直在参考这个网站,学习如何在Django中制作动态表单。在他的视图中,他使用了
if request.method == 'POST':
form = UserCreationForm(request.POST)
来将数据传递到表单中,而在表单的构造函数里,他使用了
extra = kwargs.pop('extra')
来访问POST数据。我试着在我的视图中做类似的事情:
def custom_report(request):
if request.method=='POST':
form=CustomQueryConstraintForm(request.POST)
else:
form=CustomQueryConstraintForm()
return render(request, 'frontend/custom_report.html', {'form':form})
在我的表单构造函数中,我打印了args
和kwargs
,发现kwargs
是空的,而args
是一个包含QueryDict
的元组,里面有POST数据。如果我尝试使用form=CustomQueryConstraintForm(**request.POST)
,那么kwargs
中的每个元素都是一个列表,里面只有一个字段的值。我是不是做错了什么?如果没有的话,有没有比args[0][element_name][0]
更优雅的方式来访问这些数据?
3 个回答
0
在使用了 is_valid()
方法之后,你还可以通过 cleaned_data
这个字典来获取表单数据。就像这样:
jobForm = JobForm(request.POST)
jobForm.is_valid()
jobForm.cleaned_data
这个字典里存的是用户在表单中输入的值。
0
如果我理解得没错的话,在你发送了一个POST请求之后,你想要重新显示同一个表单页面,并且表单里的内容已经填写好了,对吧?如果是这样的话,你需要做的是:
form = CustomQueryConstraintForm(initial=request.POST)
8
这是表单的正常行为:你传入表单的POST数据是第一个参数,也就是args[0],而不是关键字参数。你想要找什么呢?
data = args[0]
print data['my_field']
在表单的构造函数中,他使用
extra = kwargs.pop('extra')
来获取POST数据。
kwargs.pop('extra')
并不是在获取POST数据。它其实是和特定用户相关的一系列问题——这是作者给出的一个场景,假设是“市场部”交给你的。
无论如何,如果你在表单的任何时候需要访问POST数据,我觉得 self.data
是最简洁的方式,它是在 forms.__init__
中设置的。
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.data['my_field']