Форум сайта python.su
Задача следующая: Есть модель1 с FileField, куда заливаются файлы в формате csv. При сохранении объекта модели1 csv должен парситься и создавать объекты модели2. Это всё сделал. Теперь вопрос - как сделать визуализацию процесса создания объектов моделий2 при сохранении объекта модели1? То есть я в админке вставляю в поле файл csv, нажимаю “сохранить” и хочу, чтобы отображало процесс создания объектов модели2
Офлайн
lorienНу например вставляю в csv файл, наимаю “сохранить” объект модели 1. Так как он достаточно велик и имеет, допустим 500 позиций, я хочу чтобы при сохранении был какой-нить прогрессбар, показывающий сколько объектов создано… типа 134/500
Что значит “отображать процесс создания”?
Офлайн
Это все реализуется, например, с помощью Push (инструменты могут быть разные).
Только это имеет смысл, если у вас тысячи (для хостинга) и десятки тысяч строк (VDS) строк как минимум и вы парсите значения, обрабатываете их как-то.
Если их меньше, то смысла делать прогресс нет, т.к. все будет и так быстро.
Возможно, вам достаточно как-то подготовить/преобразовать значения в файле и затянуть их целиком (bulk), если речь идет о записи в БД.
Офлайн
Ну да, строк в файлах по несколько тысяч.
Сейчас создание моделей из csv сделано через Command по крону, но хотелось бы это всё запихнуть в save() первой модели, и видеть процесс создания остальных объектов. Вот только пока не знаю даже в какую сторону копать и как правильней сделать. Так как файлы большие, велика вероятность словить 500 ошибку при сохранении, а данный диалог, думаю, её как-то должен помочь решить. Так что прошу совета, как лучше сделать
Офлайн
Но вы понимаете, что вообще-то такие задачи решаются не в реальном времени?
Правильно их делать с помощью очереди заданий (или просто отдельного приложения), которые обрабатываются в фоне, а по запросу можно получить статус задания (в том числе, ошибки).
https://github.com/citylive/django-progress
смотрели?
Офлайн
Чуть красивее на фронте можно сделать через ajax (без перезагрузки всей страницы):
http://djangosnippets.org/snippets/2286/
Офлайн
Понимаю, я ж так и сделал изначально, создал команду для крона… Спасибо за ссылки… завтра посмотрю
Офлайн