使用URL将模型设置为true或false

时间:2019-02-25 11:54:08

标签: python django django-class-based-views

我有一个待办事项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)

1 个答案:

答案 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请求。