Мне нужен интерфейс администратора Django, чтобы принимать загружаемые администратором файлы Excel, где данные в каждом файле Excel вставляются в мои модели баз данных. Как я могу сделать так, чтобы такая кнопка «Загрузить» отображалась на странице администратора модели Django, где при нажатии на кнопку администратору предлагается выбрать файл .xls
, данные которого затем добавляются в базу данных после завершения его загрузки?
Импорт данных Excel в модели через администратора django
Ответы (3)
Я не уверен насчет Django, но вы можете использовать xlrd для чтения и управления файлы Excel. Существует бесплатный PDF-файл, который объясняет это под названием Работа с файлами Excel в Python.
Я сделал это, но я просто настроил простое представление с загрузкой файла (на самом деле это имеет больше смысла, чем добавление его непосредственно на страницу администрирования Django, поскольку одна страница редактирования = один экземпляр модели, и я предполагаю, что ваш Excel содержит несколько модели).
в form.py простая форма с полем для загрузки файла
class ImportExcelForm(forms.Form):
file = forms.FileField(label= "Choose excel to upload")
в views.py — представление для обработки загрузки
def test_flowcell(request):
c = RequestContext(request, {'other_context':'details here'})
if request.method == 'POST': # If the form has been submitted...
form = ImportExcelForm(request.POST, request.FILES) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
excel_parser= ExcelParser()
success, log = excel_parser.read_excel(request.FILES['file'] )
if success:
return redirect(reverse('admin:index') + "pages/flowcell_good/") ## redirects to aliquot page ordered by the most recent
else:
errors = '* Problem with flowcell * <br><br>log details below:<br>' + "<br>".join(log)
c['errors'] = mark_safe(errors)
else:
c['errors'] = form.errors
else:
form = ImportExcelForm() # An unbound form
c['form'] = form
return render_to_response('sequencing/file_upload.html')
и, как было предложено в другом посте, используйте xlrd для чтения данных из файла excel. У меня есть отдельный файл ExcelParser.py для этого
import xlrd
class ExcelParser(object, excel_name):
@transaction.commit_on_success
def read_excel(self):
wb = xlrd.open_workbook(excel_name)
...
do your parsing in here.....
...
(Могу ли я добавить, что Excel — это ужасный и подверженный ошибкам способ импорта данных. Я часто использую его на своей работе и пытаюсь убедить руководство, что есть гораздо лучшие решения.)
django-import-export может быть полезен.
Он создает две кнопки «импорт» и «экспорт» для объектов администратора и позволяет выбирать многие типы расширений, включая xls. Он также показывает, что данные действительно импортируются, и запрашивает подтверждение перед выполнением.
Вам просто нужно включить его в INSTALLED_APPS и создать ресурс импорта-экспорта класса, который вы хотите загрузить, и подкласс ImportExportModelAdmin, связанный с классом ресурсов, созданным ранее, для отображения кнопок в админке.
больше информации по адресу:
http://django-import-export.readthedocs.org/en/latest/getting_started.html https://github.com/bmihelac/django-import-export а>.
.csv
вместо формата файла Excel: stackoverflow.com/questions/3974620 - person Brandon Rhodes   schedule 22.02.2013