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

Use URL to set model as true or false

我有一个待办事项应用程序,我想要一个 link,用户可以在其中单击并将 "todo" 设置为完成,而无需将其从我的数据库中删除。

我使用 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。

我的models.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)

您定义一个 DeleteView,删除对象只是 delete 控制流程的一部分。为了改变行为,我们可以覆盖 delete 函数,例如:

class TodoDeleteView(LoginRequiredMixin, DeleteView):
    model = Todo
    <b>pk_url_kwarg = 'todo_id'</b>
    success_url = '/'
    template_name = 'dashboard/dashboard_confirm_delete.html'

    def <b>delete</b>(self, request, *args, **kwargs):
        self.object = self.get_object()
        success_url = self.get_success_url()
        <b>self.object.complete = True</b>
        self.object.save()
        return HttpResponseRedirect(success_url)

pk_url_kwarg 是必要的,以使用它来获取主键以使用 get_object() 过滤和检索正确的对象。

我们可能想要使用 DeleteView 的原因是因为人们可以在该端点上发出 DELETE 请求。