Поиск по первичному ключу в графене-джанго (с реле)
Я хотел бы иметь возможность написать запрос, который выглядит следующим образом, используя первичный ключ человека, а не непрозрачные идентификаторы реле:
query {
issue(pk: 10) {
pk
state
}
}
Я был в состоянии добавить инт pk
поле из модели; Тем не менее, я не смог выяснить, как запросить его (и я немного запутался, как бы я переключился на пользовательский набор фильтров для этого).
from django.db import models
import graphene
from graphene import relay
class Issues(models.Model):
state = models.CharField(default='')
text = models.TextField(default='')
class IssueNode(DjangoObjectType):
pk = graphene.Int(source='pk')
class Meta:
model = Issue
interfaces = (relay.Node,)
filter_fields = ['pk', 'state']
class Query(graphene.ObjectType):
issue = relay.Node.Field(IssueNode)
issues = DjangoFilterConnectionField(IssueNode)
Это вызовет ошибку о pk
:
TypeError: 'Meta.fields' contains fields that are not defined on this FilterSet: pk
С этой настройкой я могу написать запрос, который выглядит так:
query {
issue(id: 'ascadf2e31af=') {
state
}
}
но так как приложение ранее использовало удобочитаемые идентификаторы, я хотел бы также поддержать это.
Любые идеи о том, как настроить пользовательский набор фильтров или если есть собственный способ сделать это с графен-джанго?
0 ответов
Вы можете просто использовать значение по умолчанию graphene.Field
и добавьте его в свой код так:
import graphene
from django.shortcuts import get_object_or_404
class Query(graphene.ObjectType):
issue_by_pk = Field(IssueNode, pk=graphene.Int())
def resolve_issue_by_pk(parent, info, **kwargs):
pk = kwargs.get('pk')
return get_object_or_404(models.Issue, pk=pk)
Ваш запрос graphQL
query findIssue {
issueByPk(pk:1){
id # will return relay id
}
}
Сообщите мне, работает ли это для вас.