Обновление формы с полем для изображения с помощью 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. но я не уверен, правильно ли я все делаю или нет. не могли бы вы дать мне совет по поводу этого представления на основе функций и как заставить его работать?
заранее спасибо за помощь