Я пытаюсь выполнить файл .json через эту функцию. Проблема в том, что каждый раз, когда я делаю запрос, браузер отображает содержимое вместо загрузки файла.Обслуживание файла .json для скачивания
Я думаю, это может быть связано с тем, что я использую .read()
в качестве параметра для конструктора объектов HttpResponse. Однако, если я использую только объект файла, я получаю следующее исключение:
TypeError: cannot serialize '_io.BufferedRandom' object
код
try:
invoices = models.Invoice.objects.filter(pk__in=document_ids).order_by(*ordering)
pcustomers = models.CustomerProxy.objects.all()
mixed_query = list(invoices) + list(pcustomers)
file = tempfile.NamedTemporaryFile(suffix='.json')
file.write(serializers.serialize('json', mixed_query).encode())
file.seek(0)
response = HttpResponse(file.read(), content_type='application/json')
response['Content-Disposition'] = 'attachment; filename=%s' % file.name
response['Content-Length'] = os.path.getsize(file.name)
except Exception:
raise
return response
Файл сгенерирован, и я вижу его под '/ tmp'. Я просто не могу заставить его быть загруженным файлом вместо содержимого. –
Вам не нужно проходить весь процесс генерации файлов для создания загружаемого файла, вам просто нужно добавить заголовок Content-Disposition. Как это работает, если вы упростите код, удалите всю часть создания файла, как я делаю в коде выше? – raphv
Если я это сделаю, у меня есть тот же результат, что и раньше, это страница, отображаемая как json. –