mirror of
				https://github.com/graphql-python/graphene.git
				synced 2025-10-31 16:07:27 +03:00 
			
		
		
		
	* Add isort and seed-isort-config pre-commit hook * Fix erroneous isort moving comment to the top of file
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| Mutations
 | ||
| =========
 | ||
| 
 | ||
| Most APIs don’t just allow you to read data, they also allow you to
 | ||
| write.
 | ||
| 
 | ||
| In GraphQL, this is done using mutations. Just like queries,
 | ||
| Relay puts some additional requirements on mutations, but Graphene
 | ||
| nicely manages that for you. All you need to do is make your mutation a
 | ||
| subclass of ``relay.ClientIDMutation``.
 | ||
| 
 | ||
| .. code:: python
 | ||
| 
 | ||
|     class IntroduceShip(relay.ClientIDMutation):
 | ||
| 
 | ||
|         class Input:
 | ||
|             ship_name = graphene.String(required=True)
 | ||
|             faction_id = graphene.String(required=True)
 | ||
| 
 | ||
|         ship = graphene.Field(Ship)
 | ||
|         faction = graphene.Field(Faction)
 | ||
| 
 | ||
|         @classmethod
 | ||
|         def mutate_and_get_payload(cls, root, info, **input):
 | ||
|             ship_name = input.ship_name
 | ||
|             faction_id = input.faction_id
 | ||
|             ship = create_ship(ship_name, faction_id)
 | ||
|             faction = get_faction(faction_id)
 | ||
|             return IntroduceShip(ship=ship, faction=faction)
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| Accepting Files
 | ||
| ---------------
 | ||
| 
 | ||
| Mutations can also accept files, that's how it will work with different integrations:
 | ||
| 
 | ||
| .. code:: python
 | ||
| 
 | ||
|     class UploadFile(graphene.ClientIDMutation):
 | ||
|          class Input:
 | ||
|              pass
 | ||
|              # nothing needed for uploading file
 | ||
| 
 | ||
|          # your return fields
 | ||
|          success = graphene.String()
 | ||
| 
 | ||
|         @classmethod
 | ||
|         def mutate_and_get_payload(cls, root, info, **input):
 | ||
|             # When using it in Django, context will be the request
 | ||
|             files = info.context.FILES
 | ||
|             # Or, if used in Flask, context will be the flask global request
 | ||
|             # files = context.files
 | ||
| 
 | ||
|             # do something with files
 | ||
| 
 | ||
|             return UploadFile(success=True)
 |