【问题标题】:Error when sending delete by ajax - Django Rest framework通过 ajax 发送删除时出错 - Django Rest 框架
【发布时间】:2018-09-13 11:26:05
【问题描述】:

我有 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&lt;pk&gt;\\d+)/$']

错误捕获:

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

【问题讨论】:

    标签: ajax django-rest-framework django-urls django-rest-viewsets


    【解决方案1】:

    问题是由于您的网址名称。你的 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');
            },
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 2019-04-08
      • 2015-09-01
      • 2019-09-01
      • 2021-06-19
      • 2017-02-19
      • 2021-02-28
      • 2022-08-04
      相关资源
      最近更新 更多