1

我有 2 个序列化程序:

class DetalleSerializer(serializers.ModelSerializer):
    producto = serializers.CharField(source='producto.nombre')
    class Meta:
        model = DetalleVenta
        fields = ('cantidad','producto')

class PedidoSerializer(serializers.ModelSerializer):
    detalleventa = DetalleSerializer(many=True, read_only=True)
    class Meta:
        model = Venta
        fields = ('id','cliente','descripcion','detalleventa','atendido')

和我的观点

class PedidoViewSet(viewsets.ModelViewSet):
    queryset = Venta.objects.exclude(atendido=True)
    serializer_class = PedidoSerializer

    def destroy(self, request, pk=None):
        try:
            queryset = Venta.objects.exclude(atendito=True)
            object = get_object_or_404(queryset, pk=pk)
            object.atendido = True
            object.save(update_fields=['atendido'])
            return Response({"status": True, "results": "Pedido atendido correctamente"})
        except NotFound as err:
            return Response({"status": False, "error_description": err.detail})

要删除,只需更改我的参与字段的状态,这是一个布尔(真/假)逻辑删除。y estas mis 2 个网址:

url(r'^pedido/$',PedidoViewSet.as_view({'get': 'list', 'post': 'create'}),name='api-pedido',),
url(r'^pedido/(?P<pk>\d+)/$',PedidoViewSet.as_view({'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy'}),
        name='api-atendido',),

所有数据的恢复都不是问题,它给我带来了我需要的一切。

通过 url: url: "{% url 'api-pedido'%}", GET

但是当我想对按钮进行逻辑删除时**(DELETE):

$('.btn').click(function(){
      $.ajax({
        url: "{%  url 'api-atendido' %}",
        data: {pk:91},
        type: 'DELETE',
        contentType: 'application/json',
        success: function(result) {
          console.log('atendido correctamente');
        },
       });
  });

它向我显示以下错误:Reverse for 'api-atendido' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['pedido/(?P<pk>\\d+)/$']

错误捕获: 在此处输入图像描述

在此处输入图像描述

缺少什么?还是我做错了什么?

4

1 回答 1

2

问题是由于您的网址名称。你的 ajax url 是 {% url 'api-atendido' %}。该 url 名称需要有效pk而不是pk作为数据发送。ajax url 应该是 {% url 'api-atendido' 'pk' %},其中pk是模型的主键Venta

$('.btn').click(function(){
    $.ajax({
        url: "{%  url 'api-atendido' 91 %}",
        data: {},
        type: 'DELETE',
        contentType: 'application/json',
        success: function(result) {
            console.log('atendido correctamente');
        },
    });
});

如果您正在动态调用 ajax 调用,请给出确切的 url 而不是其名称。因为模板渲染是由服务器完成的。所以所有的模板标签在页面渲染过程中都会被转换。要动态地考虑以下代码。

$('.btn').click(function(){
    var pk = 91; //replace this with the actual id
    $.ajax({
        url: "pedido/"+pk+"/",
        data: {},
        type: 'DELETE',
        contentType: 'application/json',
        success: function(result) {
            console.log('atendido correctamente');
        },
    });
});
于 2018-04-04T03:46:30.370 回答