我有一個頁面(對應於詳細信息視圖)顯示項目列表,每個項目都有一個關聯的複選框。頁面上有一個按鈕,當提交時會添加請求。將檢查的項目列表保留,並表示應刪除它們。刪除後,我想重定向回到相同的視圖 - 細節。即使重定向後Django表單重新提交
詳細視圖的前兩行:
def detail(request, inventory_id, category_id=None):
check_POST_and_update(request, inventory_id, category_id)
這裏是check_POST_and_update方法的相關部分。
def check_POST_and_update(request, inventory_id=None, category_id=None):
if request.method=='POST' and request.user.is_authenticated():
r = request.POST
if r.get('delete_items', None) and r.get('select_item', None):
for item_id in r.getlist('select_item'):
Item.objects.get(pk=item_id).delete()
return redirect('inventory:detail', inventory_id, category_id)
刪除和重定向似乎工作正常。我選擇了幾個項目,點擊「刪除選定項目」按鈕,返回相同的頁面,所選項目現在從列表中消失。但是,如果在此時刷新頁面,則會顯示「DoesNotExist ...項匹配查詢不存在」。即舊的POST對象正在被重新提交。我可以證實這一點:
<QueryDict: {u'select_item': [u'149'], u'csrfmiddlewaretoken': [u'MASoSxSn2hmwgFKf95WcWjnVa6GYUnPe'], u'delete_items': [u'Delete selected items']}>
爲什麼會發生這種情況?我認爲重定向方法可以防止這類問題。如何修復代碼以確保在刷新頁面時舊POST對象不會重新提交?
如果我在某處發生了一個愚蠢的錯誤,請提前致謝並誠摯地致歉!
謝謝!你是對的 - 它解決了問題。我現在正在研究重構代碼的方法,以減少「破解」。 – joshinda