def bind(self, field_name, parent): """Create translation serializer dynamically. Takes translatable model class (shared_model) from parent serializer and it may create a serializer class on the fly if no custom class was specified. """ super(TranslatedFieldsField, self).bind(field_name, parent) # Expect 1-on-1 for now. related_name = field_name # This could all be done in __init__(), but by moving the code here, # it's possible to auto-detect the parent model. if self.shared_model is not None and self.serializer_class is not None: return # Fill in the blanks if self.serializer_class is None: # Auto detect parent model if self.shared_model is None: self.shared_model = parent.opts.model # Create serializer based on shared model. translated_model = self.shared_model._parler_meta[related_name] self.serializer_class = create_translated_fields_serializer( self.shared_model, related_name=related_name, meta={'fields': translated_model.get_translated_fields()}) else: self.shared_model = self.serializer_class.Meta.model # Don't need to have a 'language_code', it will be split up already, # so this should avoid redundant output. if 'language_code' in self.serializer_class.base_fields: raise ImproperlyConfigured( "Serializer may not have a 'language_code' field")
def bind(self, field_name, parent): """ Create translation serializer dynamically. Takes translatable model class (shared_model) from parent serializer and it may create a serializer class on the fly if no custom class was specified. """ super(TranslatedFieldsField, self).bind(field_name, parent) # Expect 1-on-1 for now. Allow using source as alias, # but it should not be a dotted path for now related_name = self.source or field_name # This could all be done in __init__(), but by moving the code here, # it's possible to auto-detect the parent model. if self.shared_model is not None and self.serializer_class is not None: return # Fill in the blanks if self.serializer_class is None: # Auto detect parent model if self.shared_model is None: self.shared_model = parent.Meta.model # Create serializer based on shared model. translated_model = self.shared_model._parler_meta[related_name] self.serializer_class = create_translated_fields_serializer( self.shared_model, related_name=related_name, meta={'fields': translated_model.get_translated_fields()}) else: self.shared_model = self.serializer_class.Meta.model
def bind(self, field_name, parent): """ Create translation serializer dynamically. Takes translatable model class (shared_model) from parent serializer and it may create a serializer class on the fly if no custom class was specified. """ super(TranslatedFieldsField, self).bind(field_name, parent) # Expect 1-on-1 for now. Allow using source as alias, # but it should not be a dotted path for now related_name = self.source or field_name # This could all be done in __init__(), but by moving the code here, # it's possible to auto-detect the parent model. if self.shared_model is not None and self.serializer_class is not None: return # Fill in the blanks if self.serializer_class is None: # Auto detect parent model if self.shared_model is None: self.shared_model = parent.Meta.model # Create serializer based on shared model. translated_model = self.shared_model._parler_meta[related_name] self.serializer_class = create_translated_fields_serializer( self.shared_model, related_name=related_name, meta={'fields': translated_model.get_translated_fields()} ) else: self.shared_model = self.serializer_class.Meta.model
def bind(self, field_name, parent): """Create translation serializer dynamically. Takes translatable model class (shared_model) from parent serializer and it may create a serializer class on the fly if no custom class was specified. """ super(TranslatedFieldsField, self).bind(field_name, parent) # Expect 1-on-1 for now. related_name = field_name # This could all be done in __init__(), but by moving the code here, # it's possible to auto-detect the parent model. if self.shared_model is not None and self.serializer_class is not None: return # Fill in the blanks if self.serializer_class is None: # Auto detect parent model if self.shared_model is None: self.shared_model = parent.opts.model # Create serializer based on shared model. translated_model = self.shared_model._parler_meta[related_name] self.serializer_class = create_translated_fields_serializer( self.shared_model, related_name=related_name, meta={'fields': translated_model.get_translated_fields()} ) else: self.shared_model = self.serializer_class.Meta.model # Don't need to have a 'language_code', it will be split up already, # so this should avoid redundant output. if 'language_code' in self.serializer_class.base_fields: raise ImproperlyConfigured("Serializer may not have a 'language_code' field")
def test_serializer_creation(self): sx = create_translated_fields_serializer(Country)() assert sx.fields["name"] assert sx.fields["url"] assert sx.fields["language_code"]
def test_automatic_translation_serializer_creation(self): serializer = create_translated_fields_serializer(Country)() assert serializer.fields["name"] assert serializer.fields["url"] assert serializer.fields["language_code"]