Django-ckeditor 不使用 crispy-forms 保存编辑

Django-ckeditor not saving edits with crispy-forms

我的表格很糟糕,我想将一个字段从 Textarea 更改为 CKEDitorUploadingWdidget

所以我的表格看起来像这样(我已经离开了以前的工作:

class RenameStudyForm(BetterModelForm):
    name = forms.CharField(label='Study Name', max_length=51, required=False) # Update study name
    #waiver = forms.CharField(widget=forms.Textarea, label='Waiver of Documentation', required=False) 
    waiver = forms.CharField(widget=CKEditorUploadingWidget(), label='Waiver of Documentation', required=False)

我修改了我的模型如下:

class study(models.Model):
    researcher = models.ForeignKey("auth.user") # Researcher's name
    name = models.CharField(max_length = 51) # Study name
    instrument = models.ForeignKey("instrument") # Instrument associated with study
    #waiver = models.TextField(blank = True) 
    waiver = RichTextUploadingField(blank = True)

我的模板看起来有:

    {% load crispy_forms_tags %}
    {{ form.media }}
    {% crispy form %}    

当我进入编辑豁免的屏幕时,我得到了一个要编辑的富文本字段,正如我所期望的那样。但是,我在该字段中输入的任何内容都不会传回表单。在表单中我添加了一个打印语句,如下所示

def clean(self):
    cleaned_data = super(RenameStudyForm, self).clean()
    print(cleaned_data['waiver'])

印刷总是给出原文。谁能帮帮我

编辑

当我针对 forms.Textarea 小部件使用 CKEditorUploadingWidget 时,我一直在查看控制台,它似乎生成以下 jQuery 警告

Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience.

我相信我得到这个是因为我正在使用这个按钮将表单加载到模式中

<button type="button" class="btn btn-secondary btn-block"   onclick = "modal_form('/interface/study/{{ current_study|urlencode }}/rename_study/')" >Update Study</button>

还有这个观点

def rename_study(request, study_name):
    #do stuff
    return render(request, 'researcher_UI/add_study_modal.html', form_package)

所以我的 JavaScript for ckeditor 现在正在加载,而不是在最初加载文档时加载,所以我认为这会导致问题。任何想法真的很感激

找到答案了。正在通过 ajax 提交表单。因此,我需要将 CKEditor 数据复制到表单字段中,我使用

for (var instance in CKEDITOR.instances){
    CKEDITOR.instances[instance].updateElement();
}