Как обрабатывать PATCH-запрос от HTMX в Django?

Я хочу отправить запрос PATCH в мое приложение, но я не уверен, как использовать этот запрос в Django. В настоящее время я получаю следующую ошибку.

AttributeError: 'WSGIRequest' object has no attribute 'PATCH'

Поле ввода в HTMX-файле выглядит следующим образом (я также убедился, что отправил CSRF-токен):

<input 
        hx-patch="{% url 'my_update' myobj.id %}"
        hx-swap="none" />

Это представление Django View

class MyHtmxView(View):

def patch(self, request, *args, **kwargs):
    form = MyForm(request.PATCH)
    if form.is_valid():
        form.save()
        # return an okay status? 200?
    else:
        return HttpResponse(self.form_invalid(form))

Django получает запрос, но не уверен, что делать с request.PATCH. Я вижу в документации Django, что есть HttpRequest.GET и HttpRequest.POST, но нет HttpRequest.PATCH https://docs.djangoproject.com/en/3.2/ref/request-response/#httprequest-objects. Как лучше всего обрабатывать PATCH?

Если вы хотите использовать запрос патча. Для этого вы можете добавить drf APIView. Например:

class MyClass(APIView):
    def patch(self, request):
        pass

Исходя из документов , информация о вашей форме будет находиться в атрибуте request.POST. Вы можете проверить наличие PATCH с помощью if request.method == "PATCH".

На этот вопрос ответили здесь

Вам необходимо вручную разобрать тело запроса, доступ к которому можно получить через request.body и разобрать с помощью QueryDict(request.body)

from django.http.request import QueryDict
 
class MyHtmxView(View):

    def patch(self, request, *args, **kwargs):
        
        # parse request body mannualy
        data = QueryDict(request.body)

        form = MyForm(data)
        if form.is_valid():
            form.save()
            # return an okay status? 200?
        else:
            return HttpResponse(self.form_invalid(form))
Вернуться на верх