我一直在使用this site作为如何在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
的元组,而form=CustomQueryConstraintForm(**request.POST)
包含POST数据。如果我尝试使用kwargs
,args[0][element_name][0]
中的每个元素都是一个包含字段值作为唯一元素的列表。我在这里做错了吗?如果没有,是否有更优雅的方式来访问数据而不是{{1}}?
答案 0 :(得分:8)
这是表单的预期行为:传递给表单的POST数据是第一个参数args [0]而不是关键字参数。你在找什么?
data = args[0]
print data['my_field']
并在他使用的表单构造函数中 要访问的额外= kwargs.pop('extra') POST数据。
kwargs.pop('extra')
没有获得POST数据。这是与给定用户相关的问题列表 - 作者给出了“营销部门”递给您的一些情景。
在任何情况下,如果您需要在表单中的任何位置访问帖子数据,我会发现self.data
是forms.__init__
中设置的最干净的。{/ p>
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.data['my_field']
答案 1 :(得分:0)
如果我理解正确,在POST请求之后,您正在尝试重新显示填写表单字段的相同表单页面,对吗?如果是,这就是您所需要的:
form = CustomQueryConstraintForm(initial=request.POST)
答案 2 :(得分:0)
使用> mac_string = "68:a8:6d:0b:90:46"
> mac_int = tonumber(mac_string:gsub(':',''),16)
> print(mac_int)
1.1507259326881e+14
方法后,您还可以通过cleaned_data
字典访问表单数据。像这样:
is_valid()
它是已输入表单的值的字典。