Используйте URL, чтобы установить модель как true или false - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть приложение todo, и я хотел бы иметь ссылку, по которой пользователь может щелкнуть и установить «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.

Мои модели.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 голосов
/ 25 февраля 2019

Вы определяете 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 на этой конечной точке.

...