ajax 发送删除时出错 - Django Rest 框架

Error when sending delete by ajax - Django Rest framework

我有 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 urls:

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+)/$']

错误捕获:

少了什么?或者我做错了什么?

问题是由于您的 url 名字引起的。您的 ajax url 是 {% url 'api-atendido' %}。 url 名称需要有效的 pk 而不是将 pk 作为数据发送。 ajaxurl应该是{%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');
        },
    });
});