我有一个待办事项APP,我希望有一个链接,用户可以单击该链接并将“待办事项”设置为完整,而无需将其从我的数据库中删除。
我使用CBV,但不知道怎么做:
我尝试过
views.py:
class TodoDeleteView(LoginRequiredMixin, DeleteView):
model = Todo
success_url = '/'
template_name = 'dashboard/dashboard_confirm_delete.html'
def completeTodo(request, todo_id):
todo = Todo.objects.get(pk=todo_id)
todo.complete = True
todo.save()
但是它将它从我的数据库中删除,并且没有将其设置为true。
我的模型。py
class Todo(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE,verbose_name="Nom de l'utilisateur")
text = models.CharField(max_length=150, verbose_name="Nom de la Todo")
complete = models.BooleanField(default=False)
答案 0 :(得分:1)
您定义DeleteView
,然后删除对象只是delete
控制流程的一部分。为了更改行为,我们可以覆盖delete
函数,例如:
class TodoDeleteView(LoginRequiredMixin, DeleteView):
model = Todo
pk_url_kwarg = 'todo_id'
success_url = '/'
template_name = 'dashboard/dashboard_confirm_delete.html'
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
success_url = self.get_success_url()
self.object.complete = True
self.object.save()
return HttpResponseRedirect(success_url)
使用pk_url_kwarg
来获取主键是必要的,该主键用于过滤和检索带有get_object()
的正确对象。
我们之所以想使用DeleteView
是因为人们可以在该端点上发出DELETE
请求。