0

我想通过单击包含在表单中的字形图标来删除对象。为此,我的函数如下所示:

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 的表单并且不显示确认页面。上面的代码片段有什么问题?

4

1 回答 1

-1

抱歉这么晚才回答这个问题,但我很忙。我没有回答的另一个原因是你的答案不是我想要的答案。您可以通过函数(见上文)或使用通用视图(如您所建议的)来处理 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>
于 2017-06-07T10:39:35.387 回答