Я работаю над Python Django, и я создал представление, которое пишет и загружает CSV-файл. Теперь я закончил с типом, URL и данными в вызове ajax, а также передал функцию javascript в теге привязки. Теперь возникают проблемы, когда я нажимаю на кнопку, все данные показываются по тревоге, которые я хочу экспортировать в CSV, но нет загрузки CSV. URL загрузки генерируется в консоли. Когда я скопирую, вставьте этот URL в браузер и нажмите Enter, чтобы он успешно загрузил файл CSV и экспортировал все данные, которые я действительно хотел.
Основная проблема между тегом привязки и вызовом ajax в функции javascript. Любой разработчик может решить мою проблему?
views.py
class ServeCSV(ViewBase):
TEMPLATE_NAME = None
ACTION_ID = None
def get(self, request, *args, **kwargs):
all_ids = request.GET['id']
all_ids = json.loads(all_ids)
data = models.TimeSheet.objects.filter(id__in=all_ids)
print(data)
'''
print(type(request.GET['id']))
data = query_cache.model_get_or_404(models.TimeSheet, qobj=Q(id__in=ids))
t_id = int(kwargs.get('id'))
data = query_cache.model_get_or_404(models.TimeSheet, qobj=Q(id=t_id))
#progress = query_cache.progress_for_student(provider)
#data = models.TimeSheet.objects.all()
'''
response = HttpResponse(content_type='text/csv')
response[
'Content-Disposition'
] = 'attachment; filename="timesheet.csv"'
writer = csv.writer(response)
writer.writerow(['TimeSheet info'])
writer.writerow(
[
'Activity',
'Client Initials',
'Date',
'Start Time',
'End Time',
'Hours',
'Reviewed',
'Description',
]
)
writer.writerow([])
for rows in data:
writer.writerow(
[
rows.activity.name,
rows.client_initials,
rows.date_display,
rows.start_display,
rows.end_display,
rows.total_hours_str,
rows.is_reviewed,
rows.description,
]
)
return response
html
<a href="javascript: sendIDs({{ qs_ids }})"> //qs_ids render from dictionary in views
<button type="button" class="btn btn-primary"><i class="fa fa-download"></i> Download Data </button>
</a>
javascript
<script>
function sendIDs(ids){
$.ajax({
type: "GET",
url: "{% url 'serve_csv' %}",
data: { 'id':JSON.stringify(ids),'csrfmiddlewaretoken': '{{ csrf_token }}'},
//dataType: 'json',
success:function(data){
alert(data);
}});
}
</script>
Console
[30/Apr/2020 15:17:57] "GET /time/log/serve?id=%5B55%2C56%2C57%2C58%2C59%2C232%2C235%5D&csrfmiddlewaretoken=oC2brnKID41dp1K5ZvTP6EshRglkYLrLgqGMqrSOze2SWIDM5JXAmAxG1v6oCqoq HTTP/1.1" 200 760