django-import-export: no puede excluir el campo id durante la importación: KeyError: u’id ‘

En Django-1.9.6, django-import-export-0.5

Cuando bash cargar CSV sin el campo “id”, aparece este error.

Line number: 1 - u'id' 13173474, Harry McDade, 10.harry.asas@asasasas.com Traceback (most recent call last): File "/Users/isanka/dev/venv/edxubase/lib/python2.7/site-packages/import_export/resources.py", line 434, in import_row instance, new = self.get_or_init_instance(instance_loader, row) File "/Users/isanka/dev/venv/edxubase/lib/python2.7/site-packages/import_export/resources.py", line 258, in get_or_init_instance instance = self.get_instance(instance_loader, row) File "/Users/isanka/dev/venv/edxubase/lib/python2.7/site-packages/import_export/resources.py", line 252, in get_instance return instance_loader.get_instance(row) File "/Users/isanka/dev/venv/edxubase/lib/python2.7/site-packages/import_export/instance_loaders.py", line 31, in get_instance field = self.resource.fields[key] KeyError: u'id' 

Parece que “django-import-export” sigue usando el ‘id’ predeterminado. por el momento, se incluyó una columna ‘id’ en el encabezado en el archivo CSV y se excluyó la importación en resources.py

 class edxUserResource(resources.ModelResource): class Meta: model = edxUser skip_unchanged = True report_skipped = True exclude = ('id',) import_id_fields = ('edx_id', 'edx_email', 'edx_name',) #export_order = ('edx_id', 'edx_email') 

El campo id es un campo de incremento automático, por lo que si está agregando nuevos registros (creo que es el caso más), el campo id debería estar allí en el encabezado (primera línea del archivo csv) y el rest de las filas debe contener vacío me gustaría : ,

Ejemplo:

 CSV File: id, username,email,password ,ahmad,ahmad@all.com,secretum ,salafi,salafi@gmail.com,Passhdjdj In the Resource file (py): class JasResult(ImportExportModelAdmin): resource_class = JasResource skip_unchanged = True report_skipped = True exclude = ('id',) import_id_fields = ('username','email','password') 

Esto debería estar bien para la mayoría de los casos.

He descubierto la solución para importar sin columna de ID. Aquí está el código, Eche un vistazo

  if request.method == 'POST': queryset = Client.objects.filter(company=company) company = Company.objects.get(id=company) person_resource = ClientResource() dataset = Dataset() new_persons = request.FILES['myfile'] imported_data = dataset.load(new_persons.read().decode('utf-8'), format='csv') try: for row in dataset: client = Client() client.company = company client.title = row[0] client.first_name = row[1] client.last_name = row[2] client.email = row[3] client.position = row[4] client.company_name = row[5] client.vat_number = row[6] client.website = row[7] client.address = row[8] client.city = row[9] client.state = row[10] client.zip = row[11] client.country = row[12] client.phone = row[13] client.fax = row[14] client.notes = row[15] client.save() except Client.DoesNotExist: raise Http404("There is a Problem with The CSV") return render(request, 'import.html') 

Y mi recurso se ve así

 class ClientResource(resources.ModelResource): company = fields.Field( column_name='company', attribute='company', widget=ForeignKeyWidget(Company, 'name')) class Meta: model = Client skip_unchanged = True report_skipped = True exclude = ('id', 'company', 'status', 'modified', 'created') import_id_fields = ['email']