Django Загрузка CSV с помощью форм с флажками

Перед фактической загрузкой, у меня есть несколько проверенных записей, которые необходимо рассмотреть.

<td><input type="checkbox" name="checked" value="{{ row.CI }}" class="checkboxAll"></td>

если я пытаюсь использовать форму submit, я получаю эти галочки, но затем CSV представление "return response" очищает форму, так что я не могу отправить дважды, если это необходимо.

<button type="submit" class="btn " value="CSV" name="csv_download" onclick="this.form.submit();">
<a class="fa-solid fa-file-csv" style="padding-left: 5px; font-size: 9px;" href="#">&nbsp csv_form</a>            
</button>

если я пытаюсь использовать классическую загрузку CSV-файла с помощью URL, то я не получаю эти проверки, потому что форма не отправлена.

<button type="submit" class="btn " value="csv_download" name="csv_download">
<a class="fa-solid fa-file-csv" style="padding-left: 5px; font-size: 9px;" href="{% url 'download_csv' %}?{{request.GET.urlencode}}">&nbsp csv_download</a>
</button>

у кого-нибудь есть идеи, как мне обойти это?

html:

<td><input id="checkbox" type="checkbox" name="checked" value="{{ row.CI }}" class="checkboxAll"></td>

<button type="button" id="submit" class="btn " value="csv_download" name="csv_download">
<a class="fa-solid fa-file-csv" style="padding-left: 5px; font-size: 9px;" href="#">&nbsp csv_form</a>            
</button>

добавить в голову:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

добавить в нижнюю часть тела:

        <script type="text/javascript">
            //Follow Action 
            $('#submit').click(function(){
            $.ajax({
                    type: "POS",
                    url: "{% url 'follow' %}",
                    
                    headers: {
                        'X-CSRFToken': '{{csrf_token}}'
                    },
                    data: {'checkbox': $('#checkbox').prop('checked')},
                    dataType: "json",
                    success: function(response) { 
                       console.log(response)                            
                    },
                    error: function(rs, e) {
                       console.log('error')
                    }
                }); 
        });
        </script> 

view

download_csv(request):
    
    checked = request.GET.get('checkbox')
    print(checked, '*'*10)
    db_sel_columns, column = get_column_selected(request)
    rows = Vbase.objects.all().values(*db_sel_columns)
    rows_filter = baseFilter(request.GET, queryset=rows)
    rows_count = rows_filter.qs.count()
 

    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename=download.csv'
    writer = csv.writer(response)
    writer.writerow(db_sel_columns) # write header
    for row in rows_filter.qs:
        writer.writerow([row['CI'],row['Description']])

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