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

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

app1 герой 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 ответа

Вы можете импортировать оба запроса с разными именами. Ваш основной 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)

Просто определите типы в своих приложениях (скажем, внутри 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)
Другие вопросы по тегам