CKEditor в django отображается как textarea, когда я сохраняю его из формы
У меня есть форма с CKEditor и мне нужно сохранить ее в базу данных. Когда я сохраняю ее, она почему-то сохраняет ее с помощью textarea, как это:
<div>
<label for="id_body">Body:</label> <div class="django-ckeditor-widget" data-field-id="id_body" style="display: inline-block;">
<textarea name="body" cols="40" rows="10" required id="id_body" data-processed="0" data-config="{"skin": "moono-lisa", "toolbar_Basic": [["Source", "-", "Bold", "Italic"]], "toolbar_Full":
[["Styles", "Format", "Bold", "Italic", "Underline", "Strike", "SpellChecker", "Undo", "Redo"],
["Link", "Unlink", "Anchor"], ["Image", "Flash", "Table", "HorizontalRule"], ["TextColor", "BGColor"],
["Smiley", "SpecialChar"],
["Source"]], "toolbar": "Full", "height": 291, "width": "100%", "filebrowserWindowWidth": 940, "filebrowserWindowHeight": 725, "language":
"en-us", "versionCheck": false}" data-external-plugin-resources="[]"
data-id="id_body" data-type="ckeditortype"><p>fhdgh</p>
</textarea> </div> </div>
Но когда я просто нажимаю сохранить из панели администратора, все работает отлично
form.html
:
<div class="form-group">
{{form.as_p}}
{{form.media}}
</div>
forms.py
class PostForm(forms.Form):
body = forms.CharField(widget = CKEditorWidget())
class Meta:
model = Document
fields = 'body'
models.py
from django.db import models
from ckeditor.fields import RichTextField
from simple_history.models import HistoricalRecords
class Document(models.Model):
class DocumentStatus(models.TextChoices):
ACTIVE = 'active', 'Active'
ARCHIVED = 'archived', 'Archived'
header = models.CharField(max_length = 32)
body = RichTextField()
category = models.ForeignKey(Category, on_delete = models.CASCADE)
timestamp = models.DateTimeField(auto_now_add = True)
status = models.CharField(max_length = 10, choices = DocumentStatus.choices, default = DocumentStatus.ACTIVE)
history = HistoricalRecords()
def __str__(self):
return self.header
views.py
def add_document_view(request):
categories = Category.objects.all()
languages = get_language_choices()
context = {"allCategories":categories, "form":PostForm, "languages":languages}
return render(request, "documents/add-document.html", context)
def add_document(request):
if request.method == "POST":
form = PostForm(request.POST)
header = request.POST["header"]
category_id = request.POST["category"]
category = Category.objects.get(id = category_id)
f = Document(header = header,body = form, category = category)
f.save()
return HttpResponseRedirect(reverse("core:category", kwargs={"id":category_id}))
но когда я сохраняю его из админ панели все нормально
Как показать обычный текст вместо текстовой области?
Проблема была в том, что я не очистил данные из формы. Поэтому после исправления код выглядит следующим образом:
def add_document(request):
form = PostForm(request.POST)
if request.method == "POST" and form.is_valid():
body = form.cleaned_data['body']
header = request.POST["header"]
category_id = request.POST["category"]
category = Category.objects.get(id = category_id)
f = Document(header = header,body = body, category = category)
f.save()
return HttpResponseRedirect(reverse("core:category", kwargs={"id":category_id}))