Плохая производительность цикла for loop с экземпляром и массовым созданием

Мне нужно использовать bulk_create для создания большого количества "detalle" (деталей), проблема в том, что я должен итерационно просматривать json для получения аргументов, и у меня есть 4 fk, поэтому django запрашивает у меня экземпляр, а не id. но чтобы получить id, я должен сделать .get(), поэтому у меня плохая производительность, потому что его 4 получают на каждой итерации.

Есть ли способ получить все экземпляры объектов и поместить их в список или что-то вроде того, чтобы выполнить загрузку затем экземпляра без использования get каждый раз?

class DetalleFichaAllViewSet(viewsets.ModelViewSet):
serializer_class = DetalleFichaUpdateAllSerializer

def create(self, request, *args, **kwargs):
    user = self.request.user
    data = request.data
    try:
        ficha = Ficha.objects.get(autor=user.id)
        DetalleFicha.objects.filter(ficha=ficha.id).delete()
        
    except Http404:
        pass

    # Create Ficha
    now = datetime.now()
    date_time = now.strftime("%Y-%m-%d %H:%M")
    print("AAAAAA DATA:", data)
    Ficha.objects.filter(autor=user.id).update(fecha_creacion=date_time, autor=user,
                                               nombre=data["nombreFicha"], descripcion=data["descripcionFicha"])

    ficha = Ficha.objects.filter(autor=user.id).last()
    recintos = Recinto.objects.all()
    productos = Producto.objects.all()
    estandar_productos = EstandarProducto.objects.all()
    cotizaciones = Cotizacion.objects.all()
    detalles_ficha = []
    
    for detalle in data["detalles"]:
        recinto = recintos.get(id=detalle[1])
        producto = productos.get(id=detalle[10])
        estandar_producto = estandar_productos.get(id=detalle[9])
        try:
            cotizacion = cotizaciones.get(id=detalle[4])
        except ObjectDoesNotExist:
            cotizacion = None
        print("Fecha: ", detalle[8])
        detalle = DetalleFicha(carreras=detalle[0],
                               recinto=recinto, nombre=detalle[2],
                               cantidad_a_comprar=detalle[3], cotizacion=cotizacion,
                               valor_unitario=detalle[5], valor_total=detalle[6],
                               documento=detalle[7], fecha_cotizacion=detalle[8],
                               estandar_producto=estandar_producto, producto=producto,
                               ficha=ficha)
        detalles_ficha.append(detalle)
    DetalleFicha.objects.bulk_create(detalles_ficha)

    print("Array convertida", detalles_ficha)
    print(detalles_ficha[0])
    return Response(status=status.HTTP_200_OK)
Вернуться на верх