mirror of
https://github.com/graphql-python/graphene-django.git
synced 2024-11-22 01:27:01 +03:00
Build powerful, efficient, and flexible GraphQL APIs with seamless Django integration.
f67c5dbc8c
This reverts the change to `convert_field_to_djangomodel` introduced in https://github.com/graphql-python/graphene-django/pull/1315 for the reasons discussed here https://github.com/graphql-python/graphene-django/pull/1315/files#r1015659857. As mentioned there, without reverting this code, "queries are forced every time an object is resolved, making an exponential number of queries when nesting without any possibility of optimizing". That regression prevented `graphene-django-optimizer` from working with `graphene-django` v3.0.0b9+ (where this change first was published), as discussed in https://github.com/graphql-python/graphene-django/issues/1356#issuecomment-1284718187, https://github.com/tfoxy/graphene-django-optimizer/issues/86, and https://github.com/tfoxy/graphene-django-optimizer/pull/83#issuecomment-1451987397. For now, this marks the two tests that depended on this problematic code as "expected to fail", and perhaps they can be reintroduced if there's a way to support this logic in a way that does not prevent `select_related` and `prefetch_related` query-optimization and introduce nested N+1s. As mentioned here https://github.com/graphql-python/graphene-django/pull/1315#issuecomment-1468594361, this is blocking upgrade to graphene-django v3 for many users, and fixing this would allow many to begin upgrading and contributing to keep graphene-django going. |
||
---|---|---|
.github | ||
bin | ||
docs | ||
examples | ||
graphene_django | ||
.coveragerc | ||
.gitignore | ||
.pre-commit-config.yaml | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
LICENSE | ||
Makefile | ||
MANIFEST.in | ||
README.md | ||
README.rst | ||
setup.cfg | ||
setup.py | ||
tox.ini |
Graphene-Django
A Django integration for Graphene.
Documentation
Visit the documentation to get started!
Quickstart
For installing graphene, just run this command in your shell
pip install "graphene-django>=3"
Settings
INSTALLED_APPS = (
# ...
'django.contrib.staticfiles', # Required for GraphiQL
'graphene_django',
)
GRAPHENE = {
'SCHEMA': 'app.schema.schema' # Where your Graphene schema lives
}
Urls
We need to set up a GraphQL
endpoint in our Django app, so we can serve the queries.
from django.urls import path
from graphene_django.views import GraphQLView
urlpatterns = [
# ...
path('graphql/', GraphQLView.as_view(graphiql=True)),
]
Examples
Here is a simple Django model:
from django.db import models
class UserModel(models.Model):
name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
To create a GraphQL schema for it you simply have to write the following:
from graphene_django import DjangoObjectType
import graphene
class User(DjangoObjectType):
class Meta:
model = UserModel
class Query(graphene.ObjectType):
users = graphene.List(User)
def resolve_users(self, info):
return UserModel.objects.all()
schema = graphene.Schema(query=Query)
Then you can query the schema:
query = '''
query {
users {
name,
lastName
}
}
'''
result = schema.execute(query)
To learn more check out the following examples:
- Schema with Filtering: Cookbook example
- Relay Schema: Starwars Relay example
GraphQL testing clients
Contributing
See CONTRIBUTING.md