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="#">  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}}">  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="#">  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