[英]Accessing POST data in Django form
我一直以这个站点为例,说明如何在 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
的元组,而 QueryDict 又包含 POST 数据。 如果我尝试改用form=CustomQueryConstraintForm(**request.POST)
,则kwargs
中的每个元素都是一个列表,其中包含该字段的值作为其唯一元素。 我在这里做错了吗? 如果没有,是否有比args[0][element_name][0]
更优雅的数据访问方式?
这是 forms 的预期行为:您传递给表单的 POST 数据是第一个参数 args[0] 而不是关键字参数。 你要买什么?
data = args[0]
print data['my_field']
在表单构造函数中,他使用 extra = kwargs.pop('extra') 来访问 POST 数据。
kwargs.pop('extra')
没有获取 POST 数据。 它是与给定用户相关的问题列表——作者给出的“营销部门”交给你的一些场景。
在任何情况下,如果您需要在表单中的任何位置访问发布数据,我发现self.data
是在forms.__init__
中设置的最干净的。
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.data['my_field']
如果我理解正确,在 POST 请求之后,您正试图重新显示填写表单字段的同一表单页面,对吗? 如果是,这就是您需要的:
form = CustomQueryConstraintForm(initial=request.POST)
使用is_valid()
方法后,您还可以通过cleaned_data
字典访问表单数据。 像这样:
jobForm = JobForm(request.POST)
jobForm.is_valid()
jobForm.cleaned_data
它是已输入表单的值的字典。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.