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>