CKEditor не сохраняет данные
Я использую CKEditor для формы. В админке он работает нормально, но при использовании его в ModelForm CreateView редактор не сохраняет данные. Как в официальной документации, с таким кодом:
class EventForm(forms.ModelForm):
description = forms.CharField(widget=CKEditorWidget())
image = forms.ImageField(widget=forms.ClearableFileInput(), required=False)
class Meta:
model = Event
fields = ['title', 'description', 'type', 'start_date', 'end_date', 'fee']
И этот html:
<div>
<form hx-post="{{ request.path }}" enctype="multipart/form-data" class="modal-content">
{% csrf_token %}
<div class="modal-header">
<h1>Create new event</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
{{form.media}}
{{form.as_p}}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<input type="submit" value="Submit">
</div>
</form>
</div>
Не позволяет мне отправить форму, так как продолжает говорить, что поле описания является обязательным. Пытаюсь добавить поле виджета CKEditor в методе init, с таким кодом:
class EventForm(forms.ModelForm):
image = forms.ImageField(widget=forms.ClearableFileInput(), required=False)
class Meta:
model = Event
fields = ['title', 'description', 'type', 'start_date', 'end_date', 'fee']
def __init__(self, *args, **kwargs):
super(EventForm, self).__init__(*args, **kwargs)
self.fields['start_date'].widget = forms.SelectDateWidget()
self.fields['end_date'].widget = forms.SelectDateWidget()
self.fields['description'].widget = CKEditorWidget()
Форма будет отправлена, а экземпляр создан. Однако поле 'description' будет пустым, даже если я введу некоторое содержимое. Вот мой взгляд:
class CreateEvent(LoginRequiredMixin, CreateView):
model = Event
form_class = EventForm
template_name = 'events/events_form.html'
success_url = reverse_lazy('events:index')
def form_valid(self, form):
form.instance.author = self.request.user
event_obj = form.save(commit=True)
image = self.request.FILES.get('image')
if image:
EventImage.objects.create(title=event_obj.title, image=image, event=event_obj)
return HttpResponse(status=204, headers={'HX-Trigger' : 'eventsListChanged'})
Как убедиться, что данные сохраняются из CKeditor?
В models.py
from ckeditor.fields import RichTextField
В вашей модели
description = RichTextField()
Вам не нужно ничего делать в forms.py, кроме как поместить его в список полей
Вы можете использовать hx-vals
для передачи значения описания вручную.
Что-то вроде этого должно работать:
hx-vals="js:{description: CKEDITOR.instances.id_description.getData()}"