0

我已经用 django-tinymce 包实现了 TinyMCE。但是,我的提交按钮在没有 TinyMCE 的情况下可以正常工作,现在变得相当无用,因为一旦填写了所有内容,我就无法提交表单。

我可以在 TinyMCE 中使用 Ctrl + S (我偶然发现),一切都会正确提交。另外,我可以使用 TinyMCE“保存”插件的保存按钮来提交。我是否必须配置提交按钮才能使其与 TinyMCE 一起使用?

模板:

{% extends 'medisearch/header.html' %}
{% load crispy_forms_tags %}
{% block header %}
{{ form.media }}
{% endblock %}
{% block content %}
▷⋅⋅⋅⋅⋅⋅⋅<form action="{{ url }}" method="post">
▷⋅⋅⋅⋅⋅⋅⋅   <div class="form-group">
▷⋅⋅⋅⋅⋅⋅⋅    {% csrf_token %}
▷⋅⋅⋅⋅⋅⋅⋅    {{ form|crispy }}
▷⋅⋅⋅⋅⋅⋅⋅  </div>
▷⋅⋅⋅⋅⋅⋅⋅  <input type="submit" class="btn btn-primary" value="Speichern" />
▷⋅⋅⋅⋅⋅⋅⋅</form>
{% endblock %}

视图.py

class EntryDetail(DetailView):
    model = Mediwiki
    slug_field = 'non_proprietary_name'
    template_name = 'mediwiki/entry.html'

class MediwikiForm(FormView):
    template_name = 'mediwiki/create.html'
    form_class = MediwikiForm⋅
    success_url = "/" #TODO user get's redirected to page he's created⋅

    def form_valid(self, form):
        form.save()
        return super(MediwikiForm, self).form_valid(form)

class EntryDisplay(View):
    def get(self, request, *args, **kwargs):
        try:
            view = EntryDetail.as_view()
            return view(request, *args, **kwargs)
        except Http404: # If there's no entry in db:
            if check_user_editor(request.user) == True:
                view = MediwikiForm.as_view()
                return view(request, *args, **kwargs)
            else:
                pass
    def post(self, request, *args, **kwargs):
        view = MediwikiForm.as_view()
        return view(request, *args, **kwargs)⋅

表格.py

class MediwikiForm(ModelForm):
    wiki_page = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
    class Meta:
        model = Mediwiki⋅
        fields = '__all__'

TinyMCEurls.pyINSTALLED_APPS..

4

4 回答 4

1

我知道这对你来说可能为时已晚,但似乎我刚刚遇到了同样的问题,我的解决方案可能会在未来帮助某人。

您正在使用crispy,它包含自己的表单的javascript文件。

因此 django_tinymce/init_tinymce.js 将被引用两次。这将中断您的内容的提交,因为表单被初始化了两次。

为了解决这个问题,您可以删除 {{ form.media }} 的调用。

于 2019-05-12T21:50:54.950 回答
0

@artifex_knowledge 的答案很有意义并且有效。在此基础上,除了调用editor.save()on submit(或 on change)之外,请记住,如果用户不填写文本区域,他们将无法提交表单,但this field is required不会显示错误消息。

这是因为wiki_page默认情况下需要文本区域字段(在这种情况下为 ),因此在 html 中它将使用required呈现。但TinyMCE隐藏文本区域(并将其替换为iframe :( ),因此如果您尝试提交带有空要求的表单,它不会,但错误消息将保持隐藏。

(一种可能的解决方案是使用 JS 去除所需的属性,稍后在 django 中检查)。

于 2017-09-01T13:19:36.300 回答
0

我有一个类似的问题,并了解到它与 TinyMCE 处理文本区域的方式有关。以下初始化脚本对我有用:

<script>
tinymce.init({
    selector:'.editor',
    setup: function (editor) {
        editor.on('submit', function (e) {
            editor.save();
        });
    }
 });
</script>
于 2017-08-27T19:56:15.493 回答
-1

我也遇到了和你一样的问题,我刚刚从 Modelform 的子类中删除了:“wiki_page”字符域,并将 Tinymce 小部件放在 Meta 类中。

class MediwikiForm(ModelForm):
class Meta:
    model = Mediwiki⋅
    fields = '__all__'
    widgets = {
              'wiki_page': TinyMCE(attrs={'cols': 80, 'rows': 30})
             }
于 2016-10-03T16:25:03.280 回答