在Django表单中访问POST数据

9 投票
3 回答
15214 浏览
提问于 2025-04-16 20:31

我一直在参考这个网站,学习如何在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})

在我的表单构造函数中,我打印了argskwargs,发现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']

撰写回答