Ckeditor не сохраняет изменения django
У меня есть форма, в одном из полей которой я использую ckeditor. Однако когда я отправляю форму, изменения в поле ckeditor не сохраняются. В модели я изменил поле на aRichTextField
. Я также установил "ckeditor" в своих приложениях в настройках.
Я также пытался загрузить эти скрипты в мой шаблон:
{% load static %}
<script type="text/javascript" src="{% static "ckeditor/ckeditor-init.js" %}"></script>
<script type="text/javascript" src="{% static "ckeditor/ckeditor/ckeditor.js" %}"></script>
В дополнение к этому я также пытался добавить {{ form.media }}
вместо скриптов, но это все равно не работает.
Я использую HTMX для динамического обновления формы.
Это мой шаблон формы прямо сейчас
<form action='' method="POST" class="form" hx-post='' hx-swap='outerHTML'>
{% csrf_token %}
{{ form.media }}
<div class="form-group">
{% for field in form %}
{{ field }}
</div>
{% endfor %}
<br>
<div class='htmx-indicator'>Loading...</div>
<div class="text-center">
<button class='htmx-inverted-indicator' type='submit' >Save</button>
</div>
{% if message %}
<p>{{ message }}</p>
{% endif %}
</form>
Кто-нибудь знает, почему форма не сохраняется?
htx-post может нуждаться в полном url, а не в пустых кавычках.
попробуйте что-нибудь вроде:
<form action='' method="POST" class="form" htx-post="{% url 'book_update_view_name' book.id %}" hx-swap="outerHTML">
Если вам не нужен дополнительный параметр get, который может создать проблему, вы можете поставить onclick на кнопку submit, чтобы ckeditor передавал данные в ваше поле. Что-то вроде этого :
<script>
function saveCK(){
let ckdata = CKEDITOR.instances.your_field_id.getData();
$('#your_field_id').val(ckdata);
}
</script>
да, извините за jquery, я не уверен в эквиваленте vanilla javascript.
и на кнопке отправки добавьте
onclick="saveCK()"
Еще один вариант - использовать hx-vals.
Например:
<button type='submit' hx-vals="js:{ {{ form.NAMEOFCKEDITORFIELD.name }}: CKEDITOR.instances['{{ form.NAMEOFCKEDITORFIELD.id_for_label }}'].getData()}" hx-post=POSTURL>Save</button>