# ...
class CategoryInput(graphene.InputObjectType):
id = graphene.ID()
name = graphene.String()
class TechnologyInput(graphene.InputObjectType):
id = graphene.ID()
name = graphene.String()
class ProjectInput(graphene.InputObjectType):
title = graphene.String()
text = graphene.String()
category = graphene.Field(CategoryInput)
technologies = graphene.List(TechnologyInput)
class CreateProject(graphene.Mutation):
class Arguments:
project_data = ProjectInput()
id = graphene.Int()
created_date = graphene.DateTime()
owner = graphene.Field(UserType)
project = graphene.Field(ProjectType)
def mutate(self, info, project_data):
user = info.context.user
if user.is_anonymous:
raise Exception('You must be logged in to make projects!')
category = Category.objects.filter(id=project_data.category.id).first()
if not category:
raise Exception('Invalid category ID!')
technologies = []
for technologies_data in project_data.technologies:
technology = Technology.objects.get(id=technologies_data.id)
if technology is None:
raise Exception('Invalid technology ID!')
technologies.append(technology)
project_instance = Project(owner_id=user.id, title=project_data.title, text=project_data.text,
category=category)
project_instance.save()
project_instance.technologies.set(technologies)
return CreateProject
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}