【发布时间】:2020-09-19 06:24:20
【问题描述】:
我正在使用 Django-Graphene 为我的 web 应用程序构建和 API。我已经建立了这个简单的结构,其中我有属于category 的Product:
from graphene_django import DjangoObjectType
import graphene
from .models import ProductModel, CategoryModel
class CategoryType(DjangoObjectType):
class Meta:
model = CategoryModel
class ProductType(DjangoObjectType):
category = graphene.Field(CategoryType)
class Meta:
model = ProductModel
class CategoryInput(graphene.InputObjectType):
title = graphene.String()
class ProductInput(graphene.InputObjectType):
title = graphene.String()
category = graphene.Field(CategoryInput)
class Query(graphene.ObjectType):
products = graphene.List(ProductType)
categories = graphene.List(CategoryType)
def resolve_products(self, info):
return ProductModel.objects.all()
def resolve_categories(self, info):
return CategoryModel.objects.all()
class CreateProduct(graphene.Mutation):
class Arguments:
product_data = ProductInput(required=True)
product = graphene.Field(ProductType)
@staticmethod
def mutate(self, info, product_data):
product = ProductModel.objects.create(**product_data)
product.save()
return CreateProduct(product=product)
class CreateCategory(graphene.Mutation):
class Arguments:
title = graphene.String()
category = graphene.Field(CategoryType)
def mutate(self, info, title):
category = CategoryModel(title=title)
category.save()
return CreateCategory(category=category)
class Mutations(graphene.ObjectType):
create_product = CreateProduct.Field()
create_category = CreateCategory.Field()
schema = graphene.Schema(query=Query, mutation=Mutations)
但是当我尝试变异时,我需要传递 CategoryModel 的一个实例,我不知道该怎么做:
mutation X {
createProduct(productData: {title: "title", category: {}}) {
product {
id
}
}
}
如何创建需要标题和类别的产品?
【问题讨论】:
-
在
Arguments类中,category不必是字段,而是任何其他标量类型。例如 String, ID, ... 那么你就不需要传递整个 Object
标签: python django graphql graphene-python