2016-11-02 8 views
6

मैं ग्राफिकल एपीआई बनाने के लिए graphen-django का उपयोग करता हूं। मैंने सफलतापूर्वक इस एपीआई को बनाया है, लेकिन मैं अपनी प्रतिक्रिया फ़िल्टर करने के लिए तर्क नहीं दे सकता।graphene-django - फ़िल्टर कैसे करें?

यह मेरा models.py है:

from django.db import models 

class Application(models.Model): 
    name = models.CharField("nom", unique=True, max_length=255) 
    sonarQube_URL = models.CharField("Url SonarQube", max_length=255, blank=True, null=True) 

    def __unicode__(self): 
    return self.name 

यह मेरा schema.py है: मॉडल से graphene_django आयात DjangoObjectType से आयात ग्राफीन आयात आवेदन

class Applications(DjangoObjectType): 
    class Meta: 
     model = Application 

class Query(graphene.ObjectType): 
    applications = graphene.List(Applications) 

    @graphene.resolve_only_args 
    def resolve_applications(self): 
     return Application.objects.all() 


schema = graphene.Schema(query=Query) 

मेरे urls.py:

urlpatterns = [ 
    url(r'^', include(router.urls)), 
    url(r'^admin/', admin.site.urls), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 
    url(r'^api-token-auth/', authviews.obtain_auth_token), 
    url(r'^graphql', GraphQLView.as_view(graphiql=True)), 
] 

जैसा कि आप देख सकते हैं, मेरे पास एक आरईएसटी एपीआई भी है।

मेरे settings.py इस में शामिल हैं:

GRAPHENE = { 
    'SCHEMA': 'tibco.schema.schema' 
} 

मैं इस का पालन करें: https://github.com/graphql-python/graphene-django

जब मैं इस resquest भेजें:

{ 
    applications { 
    name 
    } 
} 

मैं इस प्रतिक्रिया मिल गया है:

{ 
    "data": { 
    "applications": [ 
     { 
     "name": "foo" 
     }, 
     { 
     "name": "bar" 
     } 
    ] 
    } 
} 

तो, यह काम करता है!

लेकिन जब मैं इस तरह एक तर्क पारित करने के लिए प्रयास करें:

{ 
    "errors": [ 
    { 
     "message": "Unknown argument \"name\" on field \"applications\" of type \"Query\".", 
     "locations": [ 
     { 
      "column": 16, 
      "line": 2 
     } 
     ] 
    } 
    ] 
} 

मैं क्या चूक गए:

{ 
    applications(name: "foo") { 
    name 
    id 
    } 
} 

मैं इस प्रतिक्रिया है? या शायद मैं कुछ गलत करूँ?

उत्तर

7

मैं के लिए एक समाधान धन्यवाद मिल गया है: http://docs.graphene-python.org/projects/django/en/latest/tutorial.html

यह मेरा जवाब है। django फिल्टर (https://github.com/carltongibson/django-filter/tree/master):

import graphene 
from graphene import relay, AbstractType, ObjectType 
from graphene_django import DjangoObjectType 
from graphene_django.filter import DjangoFilterConnectionField 
from models import Application 

class ApplicationNode(DjangoObjectType): 
    class Meta: 
     model = Application 
     filter_fields = ['name', 'sonarQube_URL'] 
     interfaces = (relay.Node,) 

class Query(ObjectType): 
    application = relay.Node.Field(ApplicationNode) 
    all_applications = DjangoFilterConnectionField(ApplicationNode) 

schema = graphene.Schema(query=Query) 

फिर, यह एक पैकेज याद आ रही थी: मैं संपादित मेरी schema.py है। Django-फ़िल्टर का उपयोग DjangoFilterConnectionField द्वारा किया जाता है।

अब मैं ऐसा कर सकते हैं:

query { 
    allApplications(name: "Foo") { 
    edges { 
     node { 
     name 
     } 
    } 
    } 
} 

और प्रतिक्रिया हो जाएगा:

{ 
    "data": { 
    "allApplications": { 
     "edges": [ 
     { 
      "node": { 
      "name": "Foo" 
      } 
     } 
     ] 
    } 
    } 
} 
संबंधित मुद्दे