Почему в django-import-export не работает use_bulk?

Я использую django-import-export, построчный импорт через import_data работает без проблем, но когда я включаю опцию use_bulk=True, он прекращает импорт и не выдает никаких ошибок. Почему это не работает?

resources.py

class ClientsResources(resources.ModelResource):

    class Meta:
        model = Clients
        fields = ('id', 'name', 'surname', 'age', 'is_active')
        batch_size = 1000
        use_bulk = True
        raise_errors = True

views.py

def import_data(request):
    if request.method == 'POST':
        file_format = request.POST['file-format']
        new_employees = request.FILES['importData']

        clients_resource = ClientsResources()
        dataset = Dataset()

        imported_data = dataset.load(new_employees.read().decode('utf-8'), format=file_format)
        result = clients_resource.import_data(imported_data, dry_run=True, raise_errors=True)

        if not result.has_errors():
            clients_resource.import_data(objs, dry_run=False)

    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

data.csv

id,name,surname,age,is_active
7,OFBCXMW,RTQPEWU,35,Y
8,DMEYSYQ,TVKHQXP,80,Y
9,ZQBQLKI,ACRDHPQ,73,Y
10,CETXHMS,BQNYNSA,52,Y
11,GWHVHAO,FUJUQLO,41,Y

Список create_instances будет пустым, если.

  • Вы работаете в режиме не-бульк (use_bulk = False) - похоже, что проблема не в этом, так как у вас это установлено OK.
  • Процесс пытается обновить (не создать).
  • При разборе каждой строки возникает ошибка валидации.

Попробуйте еще кое-что:

  • обновите код, чтобы передать raise_errors в import_data(): т.е. вызовите clients_resource.import_data(imported_data, dry_run=False, raise_errors=True)
  • .
  • добавьте отладочный print() для проверки списка update_instances в bulk_update() - пуст ли он?

Убедитесь, что обновление происходит следующим образом:

  if not result.has_errors():
    res = clients_resource.import_data(imported_data, dry_run=False)
    print(res.totals)

Попробуйте установить эту beta и эта проблема будет устранена. На данный момент 2.8.0

Вернуться на верх