Skip to content

Instantly share code, notes, and snippets.

@cfra
Created July 14, 2021 18:30
Show Gist options
  • Save cfra/0296cf73bd39e65a5dd654b4b50976b1 to your computer and use it in GitHub Desktop.
Save cfra/0296cf73bd39e65a5dd654b4b50976b1 to your computer and use it in GitHub Desktop.
Wagtail EditHandler for fields translated with django-modeltranslations
from django.conf import settings
from django.db.models.fields import NOT_PROVIDED
from wagtail.admin.edit_handlers import FieldPanel, MultiFieldPanel
class TranslatedFieldPanel(MultiFieldPanel):
"""
Allow editing of translated fields.
This will show all translation options for the field with the given name.
The default language will be shown first.
If the translated field has neither blank set nor a default configured,
the default language translation will be required.
"""
def __init__(self, field_name='', *args, **kwargs):
self.field_name = field_name
languages_default_first = [
settings.MODELTRANSLATION_DEFAULT_LANGUAGE
] + [
lang for lang in settings.MODELTRANSLATION_LANGUAGES
if lang != settings.MODELTRANSLATION_DEFAULT_LANGUAGE
]
kwargs['children'] = tuple([
FieldPanel(f"{field_name}_{lang}") for lang in languages_default_first
])
super().__init__(*args, **kwargs)
def clone_kwargs(self):
kwargs = super().clone_kwargs()
kwargs['field_name'] = self.field_name
return kwargs
def on_form_bound(self):
super().on_form_bound()
base_field = getattr(self.model, self.field_name).field
if not base_field.blank or base_field.default != NOT_PROVIDED:
self.form[
f"{self.field_name}_{settings.MODELTRANSLATION_DEFAULT_LANGUAGE}"
].field.required = True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment