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]
)