通过ajax-Django Rest框架发送删除时出错
我有2个序列化程序:通过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.
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');
},
});
});