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');
},
});
});
我有 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');
},
});
});