Удалить модель Django с помощью вызова AJAX - PullRequest
0 голосов
/ 10 июня 2018

Я пишу приложение для фотогалереи, использующее API Django Rest Framework.

Я заполняю данные в моделях Django (изображения и описания) указанным API, используя AJAX (в частности, axios).

Вопрос в том - возможно ли не только POST-данные, но и удалить их из моего внешнего интерфейса, и я имею в виду экземпляр модели - как это делается в интерфейсе администратора или даже удалить все экземпляры модели.

1 Ответ

0 голосов
/ 10 июня 2018

Да, вы также можете, например, добавить реализацию .delete(..):

class SomeModelDetail(APIView):

    def get_object(self, pk):
        try:
            return SomeModel.objects.get(pk=pk)
        except SomeModel.DoesNotExist:
            raise Http404

    # ...

    def delete(self, request, pk, format=None):
        self.get_object(pk)<b>.delete()</b>
        return Response(status=<b>status.HTTP_204_NO_CONTENT</b>)

Таким образом, ответ HTTP_204_NO_CONTENT является кодом состояния, который иногда используется для указания того, чтосоответствующий объект теперь удален.

Если затем добавить это представление в URL:

from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from app import views

urlpatterns = [
    url(r'^somemodel/(?P<pk>[0-9]+)/$', views.SomeModelDetail.as_view()),
]

format_suffix_patterns(urlpatterns)

Затем мы можем сделать DELETE AJAX-вызов:

# JavaScript (Ajax request)

$.ajax({
    url: <b>'http://localhost:8080/someapp/somemodel/123/'</b>,
    type: <b>'DELETE'</b>,
    data: {},
    contentType:'application/json',
    dataType: 'text',
    error: function(result){},
    success: function(result) {}
});

Таким образом, мы выполняем запрос метода DELETE для конкретного экземпляра somemodel (здесь с первичным ключом 123, хотя вы должны заполнить его самим собой чувственным).

...