2016-01-12 5 views
3

Я пытаюсь реализовать простой импорт и сохранение файла xls в модель с помощью django-import-export. К сожалению, документы закрывают только интеграцию с администратором. Я застрял здесь, в моем примере кода:django-import-export за пределами администратора

class UploadFileForm(forms.Form): 
    file = forms.FileField() 


class ExportSpec(resources.ModelResource): 
    class Meta: 
     model = Specialty 

view: 
def ca_import(request): 
    if request.method == 'POST' and 'import_test' in request.POST: 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      filehandle = request.FILES['file'] 
      dataset = ??? 
      result = ExportSpec().import_data(dataset, dry_run=False, 
              raise_errors=True, 
              user=request.user) 

Может кто-то с пониманием этого модуля поможет мне выполнить код этого общего примера?

Или есть общий пример, отрезанный где-то в сети, который я не нашел с помощью Google?

EDIT:

на основе Алекс ответ я был в состоянии найти рабочее решение:

def ca_import(request): 
    if request.method == 'POST' and 'import_test' in request.POST: 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      file = form.cleaned_data['file'] 
      data = bytes() 
      for chunk in file.chunks(): 
       data += chunk 
      dataset = XLS().create_dataset(data) 
      result = ExportSpec().import_data(dataset, dry_run=False, raise_errors=True, user=request.user) 
+0

Код выглядит хорошо до сих пор , Какая ошибка вы получаете, или с какой конкретной проблемой вы сталкиваетесь? –

+0

См. Строку «dataset = ???». Я считаю, что мне нужно получить набор данных из дескриптора файла. – caliph

ответ

3

Вы должны использовать Format.create_dataset() метод:

from import_export.formats.base_formats import XLS 

def your_view(): 
    filehandle = form.cleaned_data['file'] 
    data = bytes() 
     for chunk in import_file.chunks(): 
      data += chunk 
    dataset = XLS().create_dataset(data) 
    result = ExportSpec().import_data(...) 
+0

Я пробовал это, и я получаю сообщение об ошибке с 'filehandle.content' Объект ExcelInMemoryUploadedFile не имеет атрибута 'content' – caliph

+0

Извините, у меня просто нет 'django-import-export', так что может потребоваться некоторое время чтобы попасть в цель). Что делать, если вы попробуете поле 'file' формы? Проверьте обновленный ответ. –

+0

Ваш ответ направил меня в правильном направлении. Я просмотрел исходный код модуля и создал строки кода в моем редактировании выше. Возможно, есть более простой способ, но это работает. – caliph