以Django格式访问POST数据

mur*_*d99 9 python django

我一直在使用这个网站作为如何在Django中制作动态表单的示例.在他看来他使用

if request.method == 'POST':
    form = UserCreationForm(request.POST)
Run Code Online (Sandbox Code Playgroud)

将数据传递到表单和他使用的表单构造函数中

extra = kwargs.pop('extra')
Run Code Online (Sandbox Code Playgroud)

访问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})
Run Code Online (Sandbox Code Playgroud)

在我的表单构造函数中,我打印argskwargs发现它kwargs是空的,并且args是一个包含其QueryDict反过来包含POST数据的元组.如果我尝试使用form=CustomQueryConstraintForm(**request.POST),则每个元素kwargs都是一个列表,其中包含字段的值作为其唯一元素.我在这里做错了吗?如果没有,是否有更优雅的方式来访问数据args[0][element_name][0]

Yuj*_*ita 8

这是表单的预期行为:传递给表单的POST数据是第一个参数args [0]而不是关键字参数.你在找什么?

data = args[0]
print data['my_field']
Run Code Online (Sandbox Code Playgroud)

并在表单构造函数中,他使用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']
Run Code Online (Sandbox Code Playgroud)