Поиск по первичному ключу в графене-джанго (с реле)

Я хотел бы иметь возможность написать запрос, который выглядит следующим образом, используя первичный ключ человека, а не непрозрачные идентификаторы реле:

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
   }
}

Сообщите мне, работает ли это для вас.

Другие вопросы по тегам