ckeditor 不保存更改 django
ckeditor not saving changes django
我有一个表单,在其中一个字段中,我使用了 ckeditor。但是,当我提交表单时,ckeditor 字段中的更改没有被保存。在模型中,我已将字段更改为 RichTextField
。我也在设置中的应用程序中安装了“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>
有人知道为什么表格没有被保存吗?
编辑
这是我的看法
@login_required
def book_update_view(request, id=None):
book = get_object_or_404(Book, id=id)
form = BookForm(request.POST or None, instance=book)
context = {
"form": form,
"object": book,
}
if form.is_valid():
form.save()
context['message'] = 'Saved!'
if request.htmx:
return render(request, "book/snippets/forms.html", context)
return render(request, "book/update.html", context)
看起来 CKEditor 和 HTMX 之间存在冲突。以下严重依赖 this answer。它进行了以下更改:
将 HTMX 标签切换到按钮而不是表单
应用事件
CKEditor 的监听器 - 它通过 {{field.label_tag}}
现在包括
修复错位的标签
尝试将表单制作成这样(不要忘记替换 CKEditor 字段的名称 - 您可能需要检查源代码以了解其呈现方式):
<form method="post">
{% csrf_token %}
{{ form.media }}
<script>
document.body.addEventListener('htmx:configRequest', (event) => {
var element = new CKEDITOR.dom.element( document.getElementById( '{{ form.NAMEOFCKEDITORFIELD.id_for_label }}' ) );
event.detail.parameters['{{ form.NAMEOFCKEDITORFIELD.html_name }}'] = element.getEditor().getData();
})
</script>
<div class="form-group">
{% for field in form %}
{{ field.label_tag }}:<br />{{ field }}
{% endfor %}
</div>
<br>
<div class='htmx-indicator'>Loading...</div>
<div class="text-center">
<button class='htmx-inverted-indicator' type='submit' hx-post="{% url 'book_update_view_name' book.id %}" hx-target="#{{form.id}}" hx-swap="outerHTML">Save</button>
</div>
{% if message %}
<p>{{ message }}</p>
{% endif %}
我有一个表单,在其中一个字段中,我使用了 ckeditor。但是,当我提交表单时,ckeditor 字段中的更改没有被保存。在模型中,我已将字段更改为 RichTextField
。我也在设置中的应用程序中安装了“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>
有人知道为什么表格没有被保存吗?
编辑 这是我的看法
@login_required
def book_update_view(request, id=None):
book = get_object_or_404(Book, id=id)
form = BookForm(request.POST or None, instance=book)
context = {
"form": form,
"object": book,
}
if form.is_valid():
form.save()
context['message'] = 'Saved!'
if request.htmx:
return render(request, "book/snippets/forms.html", context)
return render(request, "book/update.html", context)
看起来 CKEditor 和 HTMX 之间存在冲突。以下严重依赖 this answer。它进行了以下更改:
将 HTMX 标签切换到按钮而不是表单
应用事件 CKEditor 的监听器 - 它通过 {{field.label_tag}} 现在包括
修复错位的标签
尝试将表单制作成这样(不要忘记替换 CKEditor 字段的名称 - 您可能需要检查源代码以了解其呈现方式):
<form method="post">
{% csrf_token %}
{{ form.media }}
<script>
document.body.addEventListener('htmx:configRequest', (event) => {
var element = new CKEDITOR.dom.element( document.getElementById( '{{ form.NAMEOFCKEDITORFIELD.id_for_label }}' ) );
event.detail.parameters['{{ form.NAMEOFCKEDITORFIELD.html_name }}'] = element.getEditor().getData();
})
</script>
<div class="form-group">
{% for field in form %}
{{ field.label_tag }}:<br />{{ field }}
{% endfor %}
</div>
<br>
<div class='htmx-indicator'>Loading...</div>
<div class="text-center">
<button class='htmx-inverted-indicator' type='submit' hx-post="{% url 'book_update_view_name' book.id %}" hx-target="#{{form.id}}" hx-swap="outerHTML">Save</button>
</div>
{% if message %}
<p>{{ message }}</p>
{% endif %}