2016-01-02 23:19:15 +03:00
|
|
|
from cookbook.ingredients.models import Category, Ingredient
|
|
|
|
from graphene import ObjectType, relay
|
2015-12-31 06:01:36 +03:00
|
|
|
from graphene.contrib.django.filter import DjangoFilterConnectionField
|
|
|
|
from graphene.contrib.django.types import DjangoNode
|
|
|
|
|
|
|
|
|
|
|
|
# Graphene will automatically map the User model's fields onto the UserType.
|
|
|
|
# This is configured in the UserType's Meta class (as you can see below)
|
|
|
|
class CategoryNode(DjangoNode):
|
2016-01-02 23:19:15 +03:00
|
|
|
|
2015-12-31 06:01:36 +03:00
|
|
|
class Meta:
|
|
|
|
model = Category
|
|
|
|
filter_fields = ['name', 'ingredients']
|
|
|
|
filter_order_by = ['name']
|
|
|
|
|
|
|
|
|
|
|
|
class IngredientNode(DjangoNode):
|
2016-01-02 23:19:15 +03:00
|
|
|
|
2015-12-31 06:01:36 +03:00
|
|
|
class Meta:
|
|
|
|
model = Ingredient
|
|
|
|
# Allow for some more advanced filtering here
|
|
|
|
filter_fields = {
|
|
|
|
'name': ['exact', 'icontains', 'istartswith'],
|
|
|
|
'notes': ['exact', 'icontains'],
|
|
|
|
'category': ['exact'],
|
|
|
|
'category__name': ['exact'],
|
|
|
|
}
|
|
|
|
filter_order_by = ['name', 'category__name']
|
|
|
|
|
|
|
|
|
|
|
|
class Query(ObjectType):
|
|
|
|
category = relay.NodeField(CategoryNode)
|
|
|
|
all_categories = DjangoFilterConnectionField(CategoryNode)
|
|
|
|
|
|
|
|
ingredient = relay.NodeField(IngredientNode)
|
|
|
|
all_ingredients = DjangoFilterConnectionField(IngredientNode)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
abstract = True
|