Импорт данных Excel в модели с помощью администратора django - PullRequest
8 голосов
/ 03 апреля 2012

Мне нужен интерфейс администратора Django, чтобы принимать загружаемые администратором файлы Excel, где данные из каждого файла Excel вставляются в мои модели баз данных. Как сделать так, чтобы такая кнопка «Upload» появлялась на странице администрирования модели Django, где при нажатии кнопки администратор выбирает файл .xls, данные которого затем добавляются в базу данных после завершения загрузки?

Ответы [ 3 ]

7 голосов
/ 19 марта 2013

Я сделал это, но я просто настроил простое представление с загрузкой файла (на самом деле это более разумно, чем добавление его непосредственно на страницу администрирования Django, поскольку одна страница редактирования = один экземпляр модели, и я предполагаю, что вашExcel содержит несколько моделей).

в forms.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 - это ужасный и подверженный ошибкам способ импорта данных. Я делаю это во время работы ипытаясь убедить руководство в том, что есть гораздо лучшие решения.)

4 голосов
/ 03 апреля 2012

Я не уверен насчет Django, но вы можете использовать xlrd для чтения и манипулирования файлами Excel. Существует бесплатный PDF, который объясняет это, и называется Работа с файлами Excel в Python

2 голосов
/ 22 июня 2014

django-import-export может быть полезным.

Он создает две кнопки «импорт» и «экспорт» для объектов администратора и позволяет выбирать различные типы расширений, включая xls. Он также показывает, что данные должны быть импортированы, и запрашивает подтверждение перед выполнением.

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

подробнее на:

http://django -import-export.readthedocs.org / ен / последний / getting_started.html https://github.com/bmihelac/django-import-export.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...