2016-08-17 7 views
0

Я реализовал TinyMCE с пакетом django-tinymce. Однако моя кнопка отправки, которая отлично работала без TinyMCE, теперь стала бесполезной, поскольку я не могу представить форму, как только все будет заполнено.Django-tinyMCE Кнопка отправки не работает

Я могу использовать Ctrl + S внутри TinyMCE (я обнаружил это случайно), и все будет отправлено правильно. Кроме того, я могу использовать кнопку сохранения плагина TinyMCE «save» для отправки. Нужно ли мне настраивать кнопку отправки, чтобы она работала с 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 %} 

views.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)⋅ 

forms.py

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

TinyMCE в urls.py и под INSTALLED_APPS ..

ответ

-1

I также была такая же проблема, как и у вас, и я просто удалил например: «wiki_page» charfield из подкласса Modelform и поместил виджет Tinymce в класс Meta.

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

У меня была аналогичная проблема, и я узнал, что это связано с тем, как TinyMCE занимается текстовыми областями. Для меня работал следующий скрипт init:

<script> 
tinymce.init({ 
    selector:'.editor', 
    setup: function (editor) { 
     editor.on('submit', function (e) { 
      editor.save(); 
     }); 
    } 
}); 
</script> 
0

@artifex_knowledge ответы имеют смысл, и это работает. Чтобы создать на нем, помимо звонка editor.save() на submit (или на change), имейте в виду, что если пользователи не заполняют текстовую область, они не смогут отправить форму, но сообщение об ошибке this field is required выиграло ' t будет отображаться.

Это связано с тем, что поле текстовой области (в данном случае wiki_page) требуется по умолчанию, поэтому в html оно будет отображаться с нужного. Но TinyMCE скрывает текстовую область (и заменяет ее на iframe :(), поэтому, если вы попытаетесь отправить форму пустым, это не будет, но сообщение об ошибке будет скрыто.

(Возможное решение используйте JS для удаления требуемого атрибута и позже проверьте его в django).

Смежные вопросы