mirror of
https://github.com/graphql-python/graphene-django.git
synced 2024-11-16 22:57:11 +03:00
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
|
import graphene
|
||
|
from graphene_django.types import DjangoObjectType
|
||
|
|
||
|
from cookbook.ingredients.models import Category, Ingredient
|
||
|
|
||
|
|
||
|
class CategoryType(DjangoObjectType):
|
||
|
class Meta:
|
||
|
model = Category
|
||
|
|
||
|
|
||
|
class IngredientType(DjangoObjectType):
|
||
|
class Meta:
|
||
|
model = Ingredient
|
||
|
|
||
|
|
||
|
class Query(graphene.AbstractType):
|
||
|
category = graphene.Field(CategoryType,
|
||
|
id=graphene.Int(),
|
||
|
name=graphene.String())
|
||
|
all_categories = graphene.List(CategoryType)
|
||
|
|
||
|
ingredient = graphene.Field(IngredientType,
|
||
|
id=graphene.Int(),
|
||
|
name=graphene.String())
|
||
|
all_ingredients = graphene.List(IngredientType)
|
||
|
|
||
|
def resolve_all_categories(self, args, context, info):
|
||
|
return Category.objects.all()
|
||
|
|
||
|
def resolve_all_ingredients(self, args, context, info):
|
||
|
# We can easily optimize query count in the resolve method
|
||
|
return Ingredient.objects.select_related('category').all()
|
||
|
|
||
|
def resolve_category(self, args, context, info):
|
||
|
id = args.get('id')
|
||
|
name = args.get('name')
|
||
|
|
||
|
if id is not None:
|
||
|
return Category.objects.get(pk=id)
|
||
|
|
||
|
if name is not None:
|
||
|
return Category.objects.get(name=name)
|
||
|
|
||
|
return None
|
||
|
|
||
|
def resolve_ingredient(self, args, context, info):
|
||
|
id = args.get('id')
|
||
|
name = args.get('name')
|
||
|
|
||
|
if id is not None:
|
||
|
return Ingredient.objects.get(pk=id)
|
||
|
|
||
|
if name is not None:
|
||
|
return Ingredient.objects.get(name=name)
|
||
|
|
||
|
return None
|