Я новичок в graphql, и мне трудно использовать схему из двух разных приложений в django -graphql? - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в graphql , и мне трудно использовать схему из двух разных приложений в django -graphql?

app1 hero schema.py

import graphene
from graphene_django import DjangoObjectType
from .models import Hero

class HeroType(DjangoObjectType):
    class Meta:
        model = Hero

class Query(graphene.ObjectType):
    heroes = graphene.List(HeroType)    

    def resolve_heroes(self, info, **kwargs):
        return Hero.objects.all()

app2 product schema.py

class ProductType(DjangoObjectType):
  class Meta:
    model = Product

class Query(object):
    allproducts = graphene.List(ProductType, search=graphene.String(),limit=graphene.Int(),skip=graphene.Int(), offset=graphene.Int())

    def resolve_allproducts(self, info, search=None, limit=None, skip=None, offset=None,  **kwargs):
        # Querying a list of products
        qs = Product.objects.all()
        data = []
        if search:
          filter = (
                Q(name__icontains=search)|
                Q(price__icontains=search)
            )
          qs = qs.filter(filter)

        if skip:
            qs = qs[skip:]

        if limit:
          # qs = qs[:limit]
            qs = qs[int(offset):(int(offset) + int(limit))]
        return qs

Моя проблема:
В основном проекте schema.py, как вызвать схему из app1-hero и app2-product?

Ответы [ 2 ]

0 голосов
/ 26 июля 2020

Вы можете импортировать оба запроса с разными именами. Ваш основной schema.py будет выглядеть так:

import graphene
from app1.schema import Query as app1_query
from app2.schema import Query as app2_query

class Query(app1_query, app2_query):
    # This class will inherit from multiple Queries
    pass


schema = graphene.Schema(query=Query)
0 голосов
/ 09 июля 2020

Просто определите типы в своих приложениях (скажем, в файле query.py) с их преобразователями.

import graphene
from graphene_django import DjangoObjectType
from .models import Hero

class HeroType(DjangoObjectType):
    class Meta:
        model = Hero

def resolve_hero_type(info):
    # your resolver

А затем в schema.py

from app1.query import ProductType, resolve_product_type
from app2.query import HeroType, resolve_hero_type

class Query(object):
    all_products = graphene.List(ProductType, search=graphene.String(), limit=graphene.Int(),skip=graphene.Int(), offset=graphene.Int())
    heroes = graphene.List(HeroType)

    def resolve_all_products(self, info):
        return resolve_product_type(info)

    def resolve_heroes(self, info):
        return resolve_hero_type(info)
...