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
Полный отслеживание ниже: