Django - цикл "for" для обработки файла csv занимает много времени

Я создал представление, где у меня есть форма, у меня есть input type="file" для загрузки csv файла, но мой код занимает много времени для обработки файла, для обработки файла из 1000 записей требуется около 10 минут, я проанализировал мой код и он занимает слишком много времени в цикле "for", вставка в базу данных не задерживается, потому что я использую "bulk_create", как я могу улучшить его? вот мой код:


class AsignacionCreateView(CreateView):
    model=AsignacionContact
    form_class=AsignacionForm
    template_name='gestionAsignacion/asignacion_contact.html'
    success_url = reverse_lazy('gestionAsignacion:asignacion_contact')
    def form_valid(self, form):
        isvalid = super().form_valid(form)
        csv_file = self.request.FILES['file']
        data=codecs.iterdecode(csv_file, 'utf-8')   
        data = csv.reader(data, delimiter=",")
        next(data)
        asignaciones = []
        for row in data:
            print('inicio de for')
            asignacion = AsignacionSur(
                idasignacion=AsignacionContact.objects.get(id=self.object.pk),
                producto=row[0],
                contrato=row[1],
                nombre_suscriptor=row[2],
                tipo_servicio=row[3],
                total_deuda=row[4],
                corriente_no_vencida_actual=row[5],
                corrente_vencida=row[6],
                total_deuda_corriente=row[7],
                cuota_minima_agente=row[8],
                politica_surtigas=row[9],
                categoria=row[10],
                estrato=row[11],
                ref_anio=row[12],
                historico_ref=row[12],
                ciclo=row[14],
                medidor=row[15],
                lectura=row[16],
                plan_acuerdo=row[17],
                descripcion_barrio=row[18],
                direccion=row[19],
                dias_deuda=row[20]
            )
            
            asignaciones.append(asignacion)
            if len(asignaciones) > 5000:                
                AsignacionSur.objects.bulk_create(asignaciones)
                asignaciones = []
        if asignaciones:
            AsignacionSur.objects.bulk_create(asignaciones)              
        return isvalid

Эта часть кода занимает слишком много времени:

for row in data:            
            asignacion = AsignacionSur(
                idasignacion=AsignacionContact.objects.get(id=self.object.pk),
                producto=row[0],
                contrato=row[1],
                nombre_suscriptor=row[2],
                tipo_servicio=row[3],
                total_deuda=row[4],
                corriente_no_vencida_actual=row[5],
                corrente_vencida=row[6],
                total_deuda_corriente=row[7],
                cuota_minima_agente=row[8],
                politica_surtigas=row[9],
                categoria=row[10],
                estrato=row[11],
                ref_anio=row[12],
                historico_ref=row[12],
                ciclo=row[14],
                medidor=row[15],
                lectura=row[16],
                plan_acuerdo=row[17],
                descripcion_barrio=row[18],
                direccion=row[19],
                dias_deuda=row[20]
            )
Вернуться на верх