2017-05-27 80 views
0

我想通過點擊包裹在表單中的圖標來刪除對象。 要做到這一點,我的功能看起來是這樣的:Django通過Post請求刪除對象

def deleteHabit(request, id): 
    print('deleteHabit') 
    habit_to_delete = get_object_or_404(Habit, id=id) 
    print(habit_to_delete) 

    if (request.method == 'POST'): 
     form = HabitForm(instance=habit_to_delete) 
     if form.is_valid(): # checks CSRF 
       print('delete') # normally habit_to_delete.delete() 
     return redirect('renderOverview') # wherever to go after deleting 
    else: 
     # Not Working 
     return render(request, 'overview/habit_delete_confirm', args) 

我的文章的理解和得到的是「郵報」的條件大致不會刪除部和「獲取」狀態呈現一個確認頁面,例如確認刪除。但是,該對象將被刪除,但通過單擊該表單將重定向到success_url並且不顯示確認頁面。上面的代碼片段有什麼問題?

回答

0

Sry很晚纔回答這個問題,但我很忙。我沒有回答的另一個原因是你的答案不是我正在尋找的答案。您可以通過函數(參見上文)或通用視圖(如您所建議的)來處理CRUD操作。 我上面的函數在多個案例中不正確,但在問題的情況下,我沒有得到確認頁面,這意味着我沒有得到'GET REQUEST'。所以,我的錯誤不是功能,而是正確的URL映射。

獨立我現在使用DeleteView。

在views.py

class HabitDeleteView(DeleteView): 
    model = Habit 
    success_url = reverse_lazy('display_habits') 

在urls.py:

url(r'^habit/(?P<pk>\d+)/delete$', habits_views.HabitDeleteView.as_view(), name='delete_habit'), 

模板我使用的是這樣的:

<a href="{% url 'delete_habit' habit.pk %}"> 
    <span class="glyphicon glyphicon-trash custom-trash-habit-detail"></span> 
    </a>