Сериализатор импорта DRF во время AppConfig дает неверный результат - PullRequest
0 голосов
/ 25 марта 2020

Я не уверен, как начать это, но я пробую это так ..

Учитывая следующую ситуацию: У нас есть переменная 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 и могу ли я каким-то образом изменить первую версию, чтобы добиться того, что делает вторая версия?

Любой совет приветствуется.

...