Django通过Post请求删除对象

时间:2017-05-27 22:40:54

标签: django delete-method

我想通过单击包装在表单中的glyphicon来删除对象。 为此,我的函数如下所示:

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)

我对Post和Get的理解是'Post'条件大致是删除部分和'Get'条件呈现确认页面,例如确认删除。但是,该对象将被删除,但通过单击该表单,它将重定向到success_url并且不显示确认页面。上面的代码片段有什么问题?

1 个答案:

答案 0 :(得分:0)

很晚才回答这个问题,但我很忙。我没有回答的另一个原因是你的答案不是我想要的答案。您可以通过函数(参见上文)或通用视图(如您所建议的)处理CRUD操作。 我的上述功能在多个案例中并不正确,但在问题的情况下,我没有得到确认页面,这意味着,我没有得到'获取请求'。所以,我的错误不是函数,而是正确的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>