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

通过ajax-Django Rest框架发送删除时出错,ajax,django-rest-framework,django-urls,django-rest-viewsets,Ajax,Django Rest Framework,Django Urls,Django Rest Viewsets,我有2个序列化程序: class DetalleSerializer(serializers.ModelSerializer): producto = serializers.CharField(source='producto.nombre') class Meta: model = DetalleVenta fields = ('cantidad','producto') class PedidoSerializer(serializers.

我有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')
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',),
和我的视图集

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})
要删除,只需更改my attended字段的状态,这是一个布尔(真/假)逻辑删除。 y estas mis 2URL:

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')
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',),
它向我显示了以下错误:
未找到参数为“()”且关键字参数为“{}”的“api atendido”的反转。尝试了1个模式:['pedido/(?P\\d+/$')]

错误捕获:


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

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