fields.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from django import forms
  2. from django.db import models
  3. from .widgets import CKEditorWidget
  4. class RichTextField(models.TextField):
  5. def __init__(self, *args, **kwargs):
  6. self.config_name = kwargs.pop("config_name", "default")
  7. self.extra_plugins = kwargs.pop("extra_plugins", [])
  8. self.external_plugin_resources = kwargs.pop("external_plugin_resources", [])
  9. super().__init__(*args, **kwargs)
  10. def formfield(self, **kwargs):
  11. defaults = {
  12. "form_class": RichTextFormField,
  13. "config_name": self.config_name,
  14. "extra_plugins": self.extra_plugins,
  15. "external_plugin_resources": self.external_plugin_resources,
  16. }
  17. defaults.update(kwargs)
  18. return super().formfield(**defaults)
  19. class RichTextFormField(forms.CharField):
  20. widget = CKEditorWidget
  21. def __init__(
  22. self,
  23. config_name="default",
  24. extra_plugins=None,
  25. external_plugin_resources=None,
  26. *args,
  27. **kwargs
  28. ):
  29. kwargs["widget"] = self.widget(
  30. config_name=config_name,
  31. extra_plugins=extra_plugins,
  32. external_plugin_resources=external_plugin_resources,
  33. )
  34. super().__init__(*args, **kwargs)