Django get_or_create los modelos que regresan. DoosNotExist al importar un CSV

He pasado bastante tiempo para resolver esto. Simplemente estoy tratando de importar un archivo CSV usando el módulo csv de Python y get_or_create () de Django.

Este es mi código simple (construido sobre este código):

import csv from .models import Person def import_data(): with open('/path/to/csv/people_list.csv') as f: reader = csv.reader(f) for row in reader: _, created = Org.objects.get_or_create( name=row[0], p_id=row[1], current_status=row[2], ) 

Recibo el siguiente error cuando ejecuto import_data () en el shell

 peoplelisting.models.DoesNotExist: Person matching query does not exist. 

Sí, esta Persona en particular no existe, pero ¿no es el punto de usar get_or_create ()? Si no existe, créalo?

Después de jugar mucho, finalmente me di cuenta de que el problema era el siguiente:

Mi csv también contenía una fila de encabezado que no estaba ignorando . Pensé que seguiría con la comida e ignoraré el encabezado solo después de que la importación de CSV funcionara, pero el encabezado mismo estaba creando el problema (gracias a esta publicación que (indirectamente) ayudó mucho). Los valores en el encabezado no coincidían con el esquema (max_length etc.) y eso es a lo Person matching query does not exist se refería. Ignorar el encabezado lo hizo funcionar. Sin embargo, solo espero que el mensaje de error sea más descriptivo. Espero que ayude a alguien más a ahorrar las horas que pasé depurando una cosa simple. Aquí está el código correcto:

 import csv from .models import Person def import_data(): with open('/path/to/csv/people_list.csv') as f: reader = csv.reader(f) for row in reader: if row[0] != 'Person_name': #where Person_name is first column's name _, created = Org.objects.get_or_create( name=row[0], p_id=row[1], current_status=row[2], ) 

En lugar de tener que marcar la fila [0] cada vez, simplemente puede omitir la primera fila:

 next(reader, None) # skip the headers 

fuente: omita los encabezados al editar un archivo csv con Python