Django with Javascript form not returning to View

I am trying to learn Javascript by developing an interactive form in Django. The form presents a Select list that allows multiple selections. As one or more tests in the list are selected the Javascript updates a list on the page with the current selections. When I press Submit, I expect to return to the View but instead I get a 405 Error and am not directed to the success URL. I added a Print statement to the form_valid method in the View and it never executes. Not sure how to get where I want to go.

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);
    }

}

So the Javascript works great – builds a UL every time the selection is changed and displays it. When you hit submit the idea is that you will return to View and the View will look at the form data and if valid, return to the success url. Never returns to the view though. The JS is for display purposes only. I want Django to process the form data as if the JS were not there.