Обновление формы с полем для изображения с помощью htmx и django

У меня есть модель Post

class Post(models.Model):
    content = models.TextField()
    image = models.ImageField(upload_to='posts',blank=True)

и у меня есть форма для этой модели

class PostModelForm(forms.ModelForm):

    class Meta:
        model = Post
        fields = '__all__'

Я использую htmx и у меня есть несколько частичных шаблонов внутри моего основного шаблона. вот моя форма частичного шаблона для обновления моего сообщения

{% load i18n  crispy_forms_tags widget_tweaks  %}

<form action="" class="mt-2 ml-2" hx-put="{% url 'posts:edit-post-form' post.id %}"
 hx-target="#PostContent-{{post.id}}" enctype="multipart/form-data">
 {% csrf_token %}
 {% render_field form.content class="form-control" name="content" %}
 {% render_field form.image class="form-control" name="image" %}
 <button type='submit' class="btn btn-outline-info">{% trans "Update" %}</button>
</form>

и ниже вы можете ознакомиться с моей точкой зрения

from django.http.multipartparser import MultiPartParser
from django.http import QueryDict

def edit_post_form(request,pk):
    try:
        post = Post.objects.get(pk=pk)
        form = PostModelForm(request.POST or None, request.FILES or None ,instance=post)
        if request.user.profile == post.author:
            if request.method == "PUT":
                data = QueryDict(request.body).dict()
                # print(request.META['CONTENT_TYPE'])
                # MultiPartParser(request.META, request, request.upload_handlers).parse()
            
                if form.is_valid():
                    form.save()
                    return redirect("posts:edit-post-detail" ,  pk=post.id)
                else:
                    print(form.errors)
                
                
            return render(request, 'posts/partials/edit_post_form.html',context = 
            {'post':post,'form':form})
        else:
            return redirect("posts:main-post-view")
except ObjectDoesNotExist:
    return HttpResponse("This post has been deleted")

Поскольку у меня есть "multipart/form-data", когда я печатаю данные

data = QueryDict(request.body).dict()
print(data)

Я увижу на выходе что-л. похожее на словарь ниже

{'------WebKitFormBoundary4ZEQZO2qHFj9tp7w\r\nContent-Disposition: form-data; name': '"csrfmiddlewaretoken"\r\n\r\nQu0zvB12321jnzcxdfdasd7ItP9x2tLqnLjjhudnhcARv4zMkqdmzksQFuk56uq\r\n------WebKitFormBoundary4ZEQZO2qHFj9tp7w\r\nContent-Disposition: form-data; name="content"\r\n\r\nnew\r\n------WebKitFormBoundary4ZEQZO2qHFj9tp7w--\r\n'}

Я пытался использовать MultiPartParser, но получаю ошибку

django.http.multipartparser.MultiPartParserError: Invalid Content-Type: application/x-www-form-urlencoded

Я понял, что мне нужно изменить Content-type. но я не уверен, правильно ли я все делаю или нет. не могли бы вы дать мне совет по поводу этого представления на основе функций и как заставить его работать?

заранее спасибо за помощь

Вернуться на верх