How do you handle a PATCH request from HTMX in Django?
Asked Answered
M

2

9

I would like to send a PATCH request to my app but I'm not sure how to consume the request in Django. I am currently getting the following error.

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

The input field in the HTMX file looks like this (I also made sure to send the CSRF token):

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

This is the 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 is receiving the request, but isn't sure what to do with request.PATCH. I can see in the Django docs that there is a HttpRequest.GET and HttpRequest.POST but no HttpRequest.PATCH https://docs.djangoproject.com/en/3.2/ref/request-response/#httprequest-objects. What's the best way to handle the PATCH?

Monster answered 6/12, 2021 at 9:35 Comment(0)
B
8

You need to parse the request body manually which can be accessed via request.body and parse using 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))
Braden answered 10/12, 2021 at 11:15 Comment(1)
When using this, I don't get anything passed to the patch method.Chungchungking
C
2

From the docs, your form info will be in the request.POST attribute. You can check for PATCHs with if request.method == "PATCH".

Chabot answered 7/12, 2021 at 14:38 Comment(1)
Thanks. Have you had this work before? In my code, if I send a post request hx-post I can see the data inside request.POST, but when using hx-patch the request.POST is empty.Monster

© 2022 - 2024 — McMap. All rights reserved.