#python-3.x #django #django-views
#python-3.x #джанго #джанго-просмотры
Вопрос:
Мне нужно использовать bulk_create, чтобы создать много «деталей»(деталей), проблема в том, что мне нужно повторить через json, чтобы получить аргументы, и у меня есть 4 fk, поэтому django просит у меня экземпляр, а не идентификатор. но чтобы иметь идентификатор, мне нужно сделать .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)
Комментарии:
1. Вы можете повторить данные, чтобы создать списки нужных вам идентификаторов, а затем выполнить запрос для всех объектов с этими идентификаторами. Затем повторите данные еще раз, чтобы создать свои объекты и извлечь объекты из наборов запросов. Это может быть немного более эффективным, чем нынешний подход.
2. Спасибо! я попробую это сделать и опубликую результаты!