Я новичок в 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)