import importlib from django.apps import apps from .registry import sync_registry def build_serializer_class(model_name): # Remove the 's' character at the end if present if model_name.endswith('s') and not model_name.endswith('ss'): model_name = model_name[:-1] # Capitalize words separated by a dash words = model_name.split('-') capitalized_words = [word[0].upper() + word[1:] for word in words] transformed_string = ''.join(capitalized_words) # Add 'Serializer' at the end transformed_string += 'Serializer' # Try to find serializer in current directory first try: module = importlib.import_module('api.serializers') return getattr(module, transformed_string) except (ImportError, AttributeError): module = importlib.import_module('.serializers', package=__package__) return getattr(module, transformed_string) def get_serializer(instance, model_name): serializer = build_serializer_class(model_name) return serializer(instance) def get_data(model_name, model_id): model = sync_registry.get_model(model_name) # model = apps.get_model(app_label=app_label, model_name=model_name) return model.objects.get(id=model_id) def get_serialized_data(model_name, model_id): # print(f'model_name = {model_name}') model = sync_registry.get_model(model_name) instance = model.objects.get(id=model_id) serializer_class = build_serializer_class(model_name) serializer = serializer_class(instance) return serializer.data