Django с Javascript форма не возвращается в View

Я пытаюсь изучить Javascript, разрабатывая интерактивную форму в Django. Форма представляет список Select, который позволяет выбирать несколько тестов. По мере выбора одного или нескольких тестов в списке Javascript обновляет список на странице с текущими выборами. Когда я нажимаю Submit, я ожидаю возврата к представлению, но вместо этого я получаю 405 Error и не попадаю на URL-адрес успеха. Я добавил оператор Print в метод form_valid в представлении, но он не выполняется. Не знаю, как добиться желаемого результата.

views.py
class OrderTestsViewForJS(ListView):
    model = Universal_Test_File
    context_object_name = "testlist"
    success_url = '/list-patient/'
    template_name = "lab/order_tests_js.html"

    def get_context_data(self, *args, **kwargs):
        patient = get_object_or_404(Patient, pk=self.kwargs['pk'])
        context = super(OrderTestsViewForJS, self).get_context_data(**kwargs)
        context['patient'] = patient
        return context

    def form_valid(self, form):

        print("in form valid")
        return super().form_valid(form)
stripped down template.html
{% extends 'base.html' %}
{% block title %}Order Tests{% endblock title %}
{%load static%}
{% block content  %}


 
<div class="card mt-5 ">
    <div class="card-header text-center">
      NovaDev Order Tests Module
    </div>
    <div class="card-body">
        <div class="row">
            <div class="col-3 m-5"> 
            <form action="" method="post">
                {% csrf_token %}
                <select id="select_tests" name="select_tests" multiple >
                {% for test in testlist %}
                   <option value = "{{test.service_id}}" > {{test.test_name}}</option>
                {%endfor%}    
                </select>   
                <div class="row">
                    <div class="col m-5">        
                    <input id="done" type="submit"/>
                </div>
                </div>    
            </form>
            
        </div> 
        <div class="col-6"> 
            <p class= mt-5>Select one or more tests using Shift and Control (Command on a Mac)</p>
            <p class= mt-5>Orders will NOT be saved in this DEMO portfolio system</p>
            <p id="orderedtestlist">Tests Ordered</p>
            <p></p>
        </div>
    </div>
     
    </div>
</div> 

{% endblock content  %}

javascript
"use strict";

const $ = selector => document.querySelector(selector);

document.addEventListener("DOMContentLoaded", () => {
    $("#select_tests").addEventListener("change", () => {
        const orders = $("#select_tests").selectedOptions;

        let test_ary = []
        for (var i = 0; i < orders.length; i++) {
            test_ary[test_ary.length] = orders[i];
            displayTests(test_ary);
        }

        // test_ary now has only the selected test numbers
        //console.log(test_ary)
        // for test name
        //text = document.createTextNode(orders[i].text);

    });

    $("#done").addEventListener("click", () => {

        $("#done").submit();
    });
});

const displayTests = lst => {

    const ul = document.createElement("ul");
    ul.classList.add("testlist"); // a css class for formatting

    // create a li tag for each test selected and add to ul
    for (let test of lst) {
        const li = document.createElement("li");
        const txt = document.createTextNode(test.text);
        // you have the test number in test.value if needed
        li.appendChild(txt);
        ul.appendChild(li);
        console.log(txt)
    }

    // if no ul element yet, add it. otherwise replace it.
    const parent = $("#orderedtestlist");
    const nodeul = $("#orderedtestlist ul");
    //const node = parent.nodeul;
    if (nodeul == null) {
        console.log(parent)
        parent.appendChild(ul);
    } else {
        //console.log(node)
        nodeul.parentNode.replaceChild(ul, nodeul);
    }

}

Итак, Javascript работает отлично - строит UL при каждом изменении выбора и отображает его. Когда вы нажимаете submit, идея заключается в том, что вы вернетесь в View, а View посмотрит на данные формы и, если они верны, вернется к url успеха. Однако возврата к представлению не происходит. JS предназначен только для отображения. Я хочу, чтобы Django обрабатывал данные формы так, как если бы JS там не было.

Вернуться на верх