Примечание : не - хорошая идея использовать GET-запросы для выполнения побочных эффектов (таких как обновление или удаление записей в базе данных). Поэтому я бы посоветовал изменить такие запросы на POST, DELETE или PATCH. Более подробная информация внизу этого поста.
На основании показанного вами журнала вызов удаления удаляется с двумя параметрами в строке запроса : operation
и id
. Но первый оператор if
также требует параметр text
:
def basetest(request):
cu_id = request.user.id
<b>if 'operation' in request.GET and "id" in request.GET and "text" in request.GET:</b>
operation = request.GET['operation']
pid=request.GET['id']
nodename=request.GET['text']
if "create_node" == operation:
p=Buildkb4.objects.create (parent=pid,created_by=cu_id,text=nodename)
p.save()
elif "delete_node" == operation:
Buildkb4.objects.filter(pk=pid).delete()
elif "rename_node" == operation:
Buildkb4.objects.filter(pk=pid).update(text=nodename)
return render(request,"registration/basetest.html")
Так что это никогда не дойдет до случая elif "delete_node" == operation:
.
Вы можете исправить это, сделав проверку менее ограничительной, например:
def basetest(request):
cu_id = request.user.id
if 'operation' in request.GET and "id" in request.GET:
operation = request.GET['operation']
pid=request.GET['id']
if "delete_node" == operation:
Buildkb4.objects.filter(pk=pid).delete()
elif 'text' in request.GET:
nodename=request.GET['text']
if "create_node" == operation:
p=Buildkb4.objects.create(parent=pid,created_by=cu_id,text=nodename)
elif "rename_node" == operation:
Buildkb4.objects.filter(pk=pid).update(text=nodename)
return render(request,"registration/basetest.html")
Теперь это будет работать. Но a GET должен иметь никаких побочных эффектов. Таким образом, вы в основном нарушаете контракт запросов GET.
Обычно удаление выполняется через запрос POST или DELETE, не запрос GET. Изменение данных также обрабатывается запросом POST или PATCH, опять же , а не запросом GET. Отправляя запросы GET с побочными эффектами, роботы (например, поисковые системы) могут запрашивать URL-адрес, а также удалять и / или обновлять ваши данные. Это, вероятно, не , что вы хотите.