django-import-export импортировать данные из views.py - PullRequest
0 голосов
/ 03 июля 2018

Я работаю над библиотекой django-import-export для импорта и экспорта в формате xls, Все работает, вероятно, в AdminModel, Сейчас я пытаюсь сделать импорт работающим с views.py & шаблонами, но по некоторым причинам не сработал со мной

views.py

def simple_upload(request):
if request.method == 'POST':
    person_resource = resources.SimsResource()
    dataset = Dataset()
    new_persons = request.FILES['myfile']

    imported_data = dataset.load(new_persons.read())
    result = person_resource.import_data(dataset, dry_run=True)  # Test the data import

    if not result.has_errors():
        person_resource.import_data(dataset, dry_run=False)  # Actually import now

    return render(request, 'import_sims.html', {'errors': result.has_errors(), 'result': result})

return render(request, 'import_sims.html')

resources.py

class SimsResource(resources.ModelResource):
class Meta:
    model = models.Sim
    fields = ['s_serial_number', 's_number', 's_provider', 'status']

forms.py

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

url.py

    url(r'^importing_sims/$', views.simple_upload, name='Import'),

шаблон

    {% if errors %}
        errors:
        {{ errors }}
        <br><br><br>
        resluts :
        {{ result }}
    {% endif %}

      <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="myfile">
        <button type="submit">Upload</button>
      </form>

и вывод ошибок:

errors: True 
resluts : <import_export.results.Result object at 0x1072b75f8>

ОБНОВЛЕНИЕ:

после некоторых обновлений в views.py вот новая ошибка:

KeyError at /importing_sims/
'id'

, который не отображается в импорте администратора

и вот обновление:

def simple_upload(request):
    if request.method == 'POST':
    form = forms.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 = resources.SimsResource().import_data(dataset, dry_run=False, raise_errors=True, user=request.user)
        return render(request, 'import_sims.html', {'errors': result.has_errors(), 'result': result})

return render(request, 'import_sims.html')
...