Использование:
- Django 3.x [Django -фильтры 2.2.0, графен- django 2.8.0, графическое реле 2.0.1]
- Vue 2.x [Vue -Apollo]
После применения некоторых фильтров (iContains et c.) К моему поиску в GraphQL, я пытался изменить или манипулировать connection_args
как first
или after
. Я могу получить словарь на моем преобразователе как {'first': 2, 'name__icontains': 'eagle'}
со значениями, которые я вставил в IDE. Как вы можете видеть (Пример 1 / def resol_all_birds2), я использую это уже для логики c. Но я не понимаю, где манипулировать состояниями GraphQLArgument before
. after
first
. last
функция, которая поставляется с реле?
Пример 1
class ExtendedConnection(Connection):
class Meta:
abstract = True
total_count = Int()
edge_count = Int()
def resolve_total_count(root, info, **kwargs):
return root.length
def resolve_edge_count(root, info, **kwargs):
return len(root.edges)
class Birds2Node(DjangoObjectType):
class Meta:
model = Birds
filter_fields = {
'id': ['exact', 'icontains'],
'name': ['exact', 'icontains', 'istartswith', 'iendswith'],
}
interfaces = (relay.Node, )
connection_class = ExtendedConnection
# --- CUSTOM FIELDS -->
# pkey = _db primary key
pKey = Int()
def resolve_pKey(parent, info):
return parent.pk
# qRank = Item Rank in Edge Array
qRank = Int()
def resolve_qRank(parent, info, **kwargs):
return info.path[2]
class Birds2Query(ObjectType):
birds2 = relay.Node.Field(Birds2Node)
all_birds2 = DjangoFilterConnectionField(Birds2Node)
def resolve_all_birds2(self, info, **kwargs):
if 'name__icontains' in kwargs:
nameIcon = kwargs['name__icontains']
nameIconBool = bool(nameIcon.strip()) # if blanks turns False
if nameIconBool == False: # has blanks
return Birds.objects.filter(name=None)
pass
if 'name__istartswith' in kwargs:
nameIsta = kwargs['name__istartswith']
nameIstaBool = bool(nameIsta.strip()) # if blanks turns False
if nameIstaBool == False: # has blanks
return Birds.objects.filter(name=None)
pass
return
Например, в моей IDE я объявляю allBirds2(first: 2, name_Icontains: "a")...
я могу получить эти значения с помощью моего преобразователя в виде словаря через ** kwargs`` или через args def resolve_all_birds2(self, info, first, name_icontains):
, пока все хорошо, я могу манипулировать моим ModelQuery, и он возвращает только 2 на Edge.
Но представьте, что я хочу изменить first: 2
на first: 10
в моем BackEnd? Могу ли я обновить словарь? Документация означает «да», но кажется, что она строго связана с объектными типами (полями), которые вы разрешаете. Например, я попробовал это ...
Пример 2
def resolve_all_birds2(self, info, **kwargs):
<...>
return {'first': '20', 'name__icontains': 'd' }
Выход IDE:"message": «Объект dict не имеет атрибута model»
Пример 3
def resolve_all_birds2(self, info, first, **kwargs):
<...>
return f'20, {first}!'
Выходной IDE:"message": "имя 'first' не определено",
Вопрос
К сожалению, я обнаружил только манипуляции с параметрами на модельный запрос в графене - python док. Поэтому мой вопрос заключается в том, как я могу манипулировать - в своем бэкэнде - значениями полей before
. after
first
. last
, это реле предлагает и уже используется в моей IDE. Должен ли я объявить их дополнительно в моем DjangoObjectType или создать собственный узел для манипулирования и изменения значений после того, как пользователь отправит запрос?