Error: The invalid form control is not focusable

ghz 7months ago ⋅ 63 views

I'm encountering an issue with my Django form where I'm getting the following error messages in my browser console:

  • The invalid form control with name=‘content’ is not focusable.
  • An invalid form control is not focusable.

I'm not sure what's causing this error or how to resolve it. I've checked my HTML form and Django view, but I can't seem to find any obvious issues.

Btw, I'm kind of new to both CKEditor and Django, excuse me for any "dumb" requests - I just couldn't find a fix to this.

Here's a snippet of my HTML form:

create.html:

<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Create Post</title>
    <link rel="stylesheet" href="{% static 'django_ckeditor_5/dist/styles.css' %}">
</head>
<body>
<div class="container">
    <div class="card">
        <h1>Create Post</h1>
        <form action="" method="POST" enctype="multipart/form-data">
            <!-- Other fields, removed for simplicity reasons. -->
            <div class="input">
                {{ form.content }}
            </div>
            <button type="submit">Create Post</button>
        </form>
    </div>
</div>
<script src="{% static 'django_ckeditor_5/dist/bundle.js' %}"></script>
</body>
</html>

views.py(only the function required for create.html:

def createPost(request):
    if request.user.is_authenticated:
        if request.method == "POST":
            form = forms.CreatePostForm(request.POST, request.FILES)
            if form.is_valid():
                post = form.save(commit=False)
                post.author = request.user
                post.slug = slugify(post.title)
                post.save()
                messages.success(request, 'Post created successfully.')
                return redirect('home')
            else:
                messages.error(request, 'Error creating post. Please check the form.')
        else:
            form = forms.CreatePostForm()
        context = {'form': form}
        return render(request, 'create.html', context)
    else:
        raise PermissionDenied()

models.py:

import os
import uuid

from django.db import models
from django.utils.text import slugify
from django_ckeditor_5.fields import CKEditor5Field
from django.contrib.auth.models import User

def thumbnail_upload_path(instance, filename):
    _,ext = os.path.splitext(filename)
    new_filename = f"{uuid.uuid4()}{ext}"
    return os.path.join("uploads/thumbnails/", new_filename)

class Post(models.Model):
    title = models.CharField(max_length=50, null=False, blank=False)
    desc = models.TextField(max_length=255, null=False, blank=False)
    slug = models.SlugField(unique=True, blank=True)
    thumbnail = models.ImageField(upload_to=thumbnail_upload_path, null=False, blank=False)
    category = models.CharField(max_length=20, null=False, blank=False, default="Technology")
    keywords = models.CharField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    content = CKEditor5Field('Text', config_name='extends')

    def save(self, *args, **kwargs):
        if not self.slug or self.title != self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.title

forms.py:

from django import forms
from django_ckeditor_5.widgets import CKEditor5Widget
from . import models

class CreatePostForm(forms.ModelForm):
    class Meta:
        model = models.Post
        fields = '__all__'
        widgets = {
            'content': CKEditor5Widget(config_name='extends'),
        }

I've checked the HTML form and the Django view to ensure that the CKEditor5 widget is properly included and the form data is handled correctly. Despite my efforts, error messages continue to appear in the browser.

Answers

The error you're encountering with the CKEditor5 field usually indicates that there's an issue with the form validation. In your case, it seems that CKEditor5 is not initializing properly, and this is causing the form field to be considered invalid.

Let's try to troubleshoot and resolve this issue:

  1. Check CKEditor5 Initialization: Make sure that CKEditor5 is properly initialized in your template. You're including the CKEditor5 bundle script at the end of your HTML body, which is correct. However, ensure that there are no JavaScript errors occurring before CKEditor5 is initialized.

  2. Verify CKEditor5 Configuration: Double-check the CKEditor5 configuration in your form template (create.html) and in your form definition (forms.py). Ensure that the config_name matches in both places.

  3. Inspect Form Validation Errors: Since the error message indicates that the form control with the name 'content' is invalid, try to inspect the form validation errors in your Django view. You can print form.errors in your view to see if there are any specific errors related to the 'content' field.

  4. Handle CKEditor5 Field in Form Definition: In your form definition (forms.py), explicitly define the content field and its widget. This ensures that CKEditor5 is properly handled in the form.

    class CreatePostForm(forms.ModelForm):
        content = forms.CharField(widget=CKEditor5Widget(config_name='extends'))
    
        class Meta:
            model = models.Post
            fields = '__all__'
    

    By explicitly defining the field, you have more control over its behavior and validation.

  5. Ensure Correct Form Submission: Ensure that the form is being submitted correctly and that all required fields, including the CKEditor5 field, are populated with valid data. If any required fields are missing or invalid, the form submission might fail.

  6. Check for JavaScript Conflicts: Make sure there are no conflicts between CKEditor5 and other JavaScript libraries or scripts used in your project. Conflicts can prevent CKEditor5 from initializing properly.

By following these steps and carefully inspecting your code, you should be able to identify and resolve the issue causing the CKEditor5 field to be considered invalid. If you continue to encounter problems, feel free to provide more details or code snippets for further assistance.