Экспорт данных набора запросов с использованием Django без необходимости повторного запроса данных - PullRequest
0 голосов
/ 27 июня 2019

Я установил приложение Django, которое запрашивает базу данных PostgreSQL. Экспорт всех данных в модели кажется относительно простым, но что если я захочу экспортировать только данные из возвращенного набора запросов.

В настоящее время я управляю этим, имея кнопку на своей странице и меняя URL, когда пользователь хочет экспортировать данные. Код в представлении, которое я отображаю, выглядит следующим образом.

def export_data(request,pk):
    resource_class = MDPResource()
    queryset = MDP.objects.filter(mdp_id=pk)
    dataset = person_resource.export(queryset)
    response = HttpResponse(dataset.csv, content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="mdpbasic.csv"'
    return response

Однако это означает, что я собираюсь сделать один запрос, когда пользователь первоначально откроет страницу, а затем второй запрос (в действительности 2 дополнительных), когда пользователь хочет экспортировать данные, к которым я уже запросил в предыдущий вид.

Кроме того, в разделе моей страницы я также использую модели Q для сложной фильтрации. Вышеуказанный метод недостаточен для экспорта данных в этом случае (я не хочу восстанавливать запрос).

Я также не хочу записывать данные в файл (если я могу помочь), потому что тогда возникает проблема необходимости удалять их с помощью os после того, как пользователь экспортирует свои данные.

Создание CSV-файла с помощью Django (динамический контент)

Я уже проверил этот вопрос, но я не уверен, как работает передача словаря в urlpattern, и все равно кажется, что запрос выполняется в любом случае еще один раз (все еще на один меньше, чем мой текущий метод).

Я не знаю, стоит ли мне проверять приложения для этой конкретной цели. Я изучил пару таких, как django-queryset-csv и django-import-export, но ни один из них, похоже, не выполняет то, что я упомянул.

django: экспортировать текущий набор запросов в csv нажатием кнопки в браузере

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

...