[英]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.