Python。Django Rest框架。如何获取自定义Json响应?

2024-09-27 04:19:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在满足条件时发出消息(如果英格瑞登特萨尔多<;=最低生活水平)告诉用户某个货源即将缺货。在

你能帮我弄清楚怎么做吗?在

在视图.py在

class CreateOrderView(generics.ListCreateAPIView):

    """Esta clase maneja los requests GET y POST."""
    queryset = Order.objects.all()
    serializer_class = OrderSerializer

    def perform_create(self, serializer):
        """Guarda la info al crear una nueva ORDEN. RESTA del stock. Controla el saldo mínimo.Devuelve el precio sugerido."""

        serializer.save()
        post = self.request.POST
        lista_productos = json.loads(post.get('productos'))
        precio_hora_trabajada = SystemParameters.objects.get(id=1).precio_hora_trabajada

        serializer.instance.costo_total = costo_total_orden(post)
        serializer.instance.save()


        horas_trabajadas_total = 0
        for prod in lista_productos:
            producto = Product.objects.get(pk=prod['id'])
            Products.objects.create(order=serializer.instance,
                                    product=producto, cantidad=prod['cantidad'])
            for ingred in producto.supplies_set.all():
                cantidad_por_ingrediente = producto.supplies_set.get(supply=ingred.supply_id).cantidad
                ingrediente = ingred.supply
                ingrediente.saldo -= cantidad_por_ingrediente*Decimal(prod['cantidad'])
                ingrediente.save()


                if ingrediente.saldo <= ingrediente.saldo_minimo:
                    alerta= 'Alerta: el supply llegó al stock mínimo'
                    content = {'alerta': alerta}
                    return Response(content)
                continue

            horas_trabajadas_total += producto.horas_trabajadas

        serializer.instance.precio_sugerido = (serializer.instance.costo_total*3)+(precio_hora_trabajada*horas_trabajadas_total)
        serializer.instance.save()

谢谢你!!在


Tags: instancegetobjectssaveprodtotalserializersupply
1条回答
网友
1楼 · 发布于 2024-09-27 04:19:27

如果需要发送自定义响应,则应重写create,而不是{}。请尝试以下操作:

class CreateOrderView(generics.ListCreateAPIView):
    """
    Esta clase maneja los requests GET y POST.
    """
    queryset = Order.objects.all()
    serializer_class = OrderSerializer

    def create(self, request, *args, **kwargs):
        """
        Guarda la info al crear una nueva ORDEN. RESTA del stock.
        Controla el saldo mínimo.Devuelve el precio sugerido.
        """
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()

        # Your code-snippet starts from here
        post = self.request.POST
        lista_productos = json.loads(post.get('productos'))
        precio_hora_trabajada = SystemParameters.objects.get(id=1).precio_hora_trabajada

        serializer.instance.costo_total = costo_total_orden(post)
        serializer.instance.save()

        horas_trabajadas_total = 0
        for prod in lista_productos:
            producto = Product.objects.get(pk=prod['id'])
            Products.objects.create(order=serializer.instance,
                                    product=producto, cantidad=prod['cantidad'])
            for ingred in producto.supplies_set.all():
                cantidad_por_ingrediente = producto.supplies_set.get(supply=ingred.supply_id).cantidad
                ingrediente = ingred.supply
                ingrediente.saldo -= cantidad_por_ingrediente * Decimal(prod['cantidad'])
                ingrediente.save()

                if ingrediente.saldo <= ingrediente.saldo_minimo:
                    alerta = 'Alerta: el supply llegó al stock mínimo'
                    content = {'alerta': alerta}
                    return Response(content)
                continue

            horas_trabajadas_total += producto.horas_trabajadas

        serializer.instance.precio_sugerido = (serializer.instance.costo_total * 3) + (
                    precio_hora_trabajada * horas_trabajadas_total)
        serializer.instance.save()
        # Your code-snippet Ended here

        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

请参见ListCreateAPIView的代码库。在

相关问题 更多 >

    热门问题