DjangoError: AttributeError: у объекта 'str' нет атрибута '_meta'. Я не могу понять причину и следствие.

У меня есть два класса, доступ к которым осуществляется по определенному условию, т.е. если id источника данных 16, то мне нужно получить данные в graphql запросе из одной сущности, а если это любой другой id, то вернуть их из другой сущности. Я знаю, что это плохая архитектура, но у меня нет возможности ее изменить, мне просто нужно решить эту задачу. В этом случае я подумал о создании адаптера, который считывает этот id из data_source и, основываясь на этом, возвращает правильную сущность в запросе. Я пытаюсь сделать это весь день, и всегда получаю ошибку, описанную ниже:

"Не удалось импортировать 'api.schema.schema' для настройки Graphene 'SCHEMA'. AttributeError: у объекта 'str' нет атрибута '_meta'."

Я перепробовал буквально все, я схожу с ума.

Я использую linux Ubuntu. Стек следующий: Django + Graphql + PostreSQL

Мы не используем миграции django, наши модели просто используют django orm для получения данных и выполнения CRUD-операций из базы данных

Вот файлы, над которыми я работал до сих пор:

мой класс адаптера:

filepath: api/app_risk_rules/models/risk_rule_config_parameters_adapter.py

from app_risk_rules.models.risk_rule_config_parameters_journey_item import (
    RiskRuleConfigParametersJourneyItem,
)
from app_risk_rules.models.risk_rule_config_parameters_values import (
    RiskRuleConfigParametersValues,
)


class RiskRuleConfigParametersAdapter:

    DATA_SOURCE_JOURNEY_IDS = ["16"]

    def __init__(self, data_source_id="16"):
        self.data_source_id = data_source_id

    def get_queryset(self):
        if self.data_source_id in self.DATA_SOURCE_JOURNEY_IDS:
            return RiskRuleConfigParametersJourneyItem.objects.all()
        else:
            return RiskRuleConfigParametersValues.objects.all()

мой тип graphql:

filepath: api/app_risk_rules/types/risk_rule_config_parameters_adapter_type.py

from graphene import Union
from app_risk_rules.models.risk_rule_config_parameters_journey_item import (
    RiskRuleConfigParametersJourneyItem,
)
from app_risk_rules.models.risk_rule_config_parameters_values import (
    RiskRuleConfigParametersValues,
)
from ..types.risk_rule_config_parameters_journey_item_type import (
    RiskRuleConfigParametersJourneyItemType,
)
from ..types.risk_rule_config_parameters_values_type import (
    RiskRuleConfigParametersValuesType,
)


class RiskRuleConfigParametersAdapterUnion(Union):
    class Meta:
        types = (
            RiskRuleConfigParametersJourneyItemType,
            RiskRuleConfigParametersValuesType,
        )

    @classmethod
    def resolve_type(cls, instance, info):
        if isinstance(instance, RiskRuleConfigParametersJourneyItem):
            return RiskRuleConfigParametersJourneyItemType
        if isinstance(instance, RiskRuleConfigParametersValues):
            return RiskRuleConfigParametersValuesType
        return RiskRuleConfigParametersAdapterUnion.resolve_type(
            instance, info
        )


# class RiskRuleConfigParametersAdapterType(DjangoObjectType):
#     class Meta:
#         model = None
#         interfaces = (ApiNode,)
#         # fields = ("data_source_id",)

#     entries = List(RiskRuleConfigParametersAdapterUnion)

#     def resolve_entries(self, info, **kwargs):
#         adapter = RiskRuleConfigParametersAdapter(
#             data_source_id=self.data_source_id
#         )
#         return adapter.get_queryset()

мой запрос в graphql:

filepath: api/app_risk_rules/queries/risk_rule_config_parameters_adapter_query.py

from graphene import JSONString, ObjectType, ID, Argument, List
from app_risk_rules.types.risk_rule_config_parameters_adapter_type import (
    RiskRuleConfigParametersAdapterUnion,
)
from app_risk_rules.models.risk_rule_config_parameters_adapter import (
    RiskRuleConfigParametersAdapter,
)
from commons.decorators.permission_decorators import sign
from commons.enums.mark_enum import Mark


class RiskRuleConfigParametersAdapterQuery(ObjectType):
    risk_rule_config_parameters_adapters = List(
        RiskRuleConfigParametersAdapterUnion,
        data_source_id=ID(required=True),
        filters=Argument(JSONString, required=False),
    )

    @sign(Mark.ALL)
    def resolve_risk_rule_config_parameters_adapters(
        self, info, data_source_id, filters=None, **kwargs
    ):
        adapter = RiskRuleConfigParametersAdapter(
            data_source_id=data_source_id
        )
        queryset = adapter.get_queryset()
        if filters:
            queryset = queryset.filter(**filters)
        return list(queryset)

схема моего приложения:

filepath: api/app_risk_rules/schema.py

Пожалуйста, помогите мне

Я испробовал все возможные способы, я превысил свой лимит GPT

Полный отслеживание ниже:

Вернуться на верх