from django.db import models from .fields import TranslatableMixin from django.core.exceptions import ValidationError class TranslatableModelMixin(models.Model): class Meta: abstract = True def clean(self): for field in self._meta.get_fields(): if isinstance(field, TranslatableMixin) and field.translatable: if not isinstance(getattr(self, field.name), dict): raise ValidationError(f'Field "{field.name}" must be a dictionary') if not any(getattr(self, field.name).values()): raise ValidationError(f'Field "{field.name}" must contain at least one translation') super().clean()