Вы можете использовать:
Todo.objects.filter(<b>pk__in=todo_ids</b>)<b>.delete()</b>
Но вышесказанное не очень безопасно:
- вы не проверяете, что запрос AJAX выполняется вошедшим в систему пользователем; и
- что пользователь имеет доступ к этим
Todo
объектам, например, если он / она является владельцем.
Таким образом, это означает, что хакер может «внедрить» первичные ключи других пользователей в свои Todo
объекты.
В случае, если модель Todo
имеет поле owner
, вы можете предотвратить это с помощью:
<b>@login_required</b>
def todo_delete_ajax(request):
todo_ids = request.POST.getlist('todo_arr[]')
if todo_ids:
Todo.objects.filter(pk__in=todo_ids<b>, owner=request.user</b>).delete()
return redirect('/todo/')
Возможно, вы также хотите использовать имя представления в вызове redirect
, поэтому:
@login_required
def todo_delete_ajax(request):
todo_ids = request.POST.getlist('todo_arr[]')
if todo_ids:
Todo.objects.filter(pk__in=todo_ids, owner=request.user).delete()
return redirect(<b>'name-of-todo-view'</b>)
, поскольку при использовании жестко закодированного URL-адреса, если вы измените путь к этому URL-адресу или запустите сервер по определенному пути, URL-адрес станет недействительным.