Django通过Post请求删除对象

问题描述:

我想通过点击包裹在表单中的图标来删除对象。 要做到这一点,我的功能看起来是这样的: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并且不显示确认页面。上面的代码片段有什么问题?

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>