Я не уверен, как начать это, но я пробую это так ..
Учитывая следующую ситуацию: У нас есть переменная Env PROFILES_SERIALIZER
в форме myapp.serializers.SomeModelSerializer
.
Этот сериализатор должен быть, благодаря переменной Env, динамически изменяемым. (По какой-то причине это неважно для проблемы).
Теперь я хочу, чтобы этот сериализатор был «импортирован / доступен» после инициализации определенного приложения под названием «content», которое выполняется через:
class ContentConfig(AppConfig):
name = "content"
profiles_serializer = None
def ready(self):
module_ser_class = settings.PROFILES_SERIALIZER.rsplit(".", 1)
if any(module_ser_class):
self.profiles_serializer = getattr(
import_module(module_ser_class[0]), module_ser_class[1]
)(many=True)
Благодаря этому я могу динамически включать этот сериализатор в другой для целей вложенной сериализации следующим образом:
class TreeNodeSerializer(serializers.ModelSerializer):
profiles = django_apps.get_app_config("content").profiles_serializer
... # so one an so forth
Полученные в результате представления хороши для точки, в которой мы могли бы иметь вложенную серилизацию в SomeSerializer, например
class SomeModelSerializer(serializers.ModelSerializer):
model1 = ModelOneSerializer()
model2 = ModelTwoSerializer()
class Meta:
model = SomeModel
fields = "__all__"
Если это так, то любое представление с serializerclass=TreeNodeSerializer
не будет отображать записи для model1
или model2
.
Однако, если мы предположим, что что PROFILES_SERIALIZER = environ.Env("PROFILES_SERIALIZER").rsplit(".",1)
Это приводит к ожидаемому поведению:
class TreeNodeSerializer(serializers.ModelSerializer):
profiles = getattr(import_module(settings.PROFILES_SERIALIZER[0]),settings.PROFILES_SERIALIZER[1])(many=True)
... # so one an so forth
Мой вопрос сейчас:
Почему есть разница где i import SomeSerializer
и могу ли я каким-то образом изменить первую версию, чтобы добиться того, что делает вторая версия?
Любой совет приветствуется.