簡體   English   中英

以 Django 形式訪問 POST 數據

[英]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})

在我的表單構造函數中,我打印了argskwargs ,發現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM