Source code for tof.fields
from django.core.exceptions import ValidationError
from django.forms.fields import MultiValueField
from .utils import TranslatableText
from .widgets import TranslatableFieldHiddenWidget, TranslatableFieldWidget
[docs]
class TranslatableFieldFormField(MultiValueField):
widget = TranslatableFieldWidget
hidden_widget = TranslatableFieldHiddenWidget
cleaned_langs = None
def __init__(self, fields, *args, **kwargs):
kwargs['widget'] = self.widget([field.widget for field in fields])
kwargs['require_all_fields'] = any(field.required for field in fields)
super().__init__(fields, *args, **kwargs)
[docs]
def compress(self, data_list):
if not data_list and self.require_all_fields:
raise ValidationError(self.error_messages['required'], code='required')
return TranslatableText().update(_origin=self.initial['_origin'], **dict(zip(self.cleaned_langs or [], data_list or [])))
[docs]
def clean(self, values):
if values and isinstance(values, (list, tuple)):
values = {str(lang)[:2]: text for lang, text in values}
self.cleaned_langs, values = list(values.keys()), list(values.values())
self.fields = self.fields * len(values)
return super().clean(values)