Skip to main content

GraphQL for Django, powered by graphene and Pydantic: define types/mutations/subscriptions from your models, with nested filtering (and/or/not), pagination, permissions and directives.

Project description

django-graphex

Codecov PyPI - Python Version Django Versions PyPI PyPI - License Downloads Ruff

GraphQL for Django, powered by graphene and Pydantic. Define your GraphQL API straight from your Django models — no DRF, no graphene-django, no django-filter.

  • Model-first types & mutationsDjangoModelType / DjangoModelMutation give you query, list and create/update/delete from a single Meta.model, validated and persisted with Pydantic v2 + the Django ORM (FK existence, uniqueness, unique_together, partial updates, choices → Enum).
  • Logical filtering — one nested filter: argument with and / or / not, per-field lookups, relation descent and plain-pk/UUID filtering (no django-filter).
  • Pagination — limit/offset, page and keyset cursor paginators with a uniform results / totalCount shape (and an automatic N+1 query optimizer).
  • Custom validation — DRF-style inline validate_<field>() / validate() or a Meta.pydantic_model.
  • Permissions, security & directives — permission classes, depth & cost limits, introspection control, and string/number/date/list directives.
  • Subscriptions — real-time GraphQL over Django Channels 4 (optional extra).

Coming from graphene-django or graphene-django-extras? See the Migration Guide for a step-by-step upgrade with before/after examples.

Requirements

  • Python: 3.12+ (3.13, 3.14 supported)
  • Django: 4.2+ (4.2, 5.0, 5.1, 5.2, 6.0 supported)
  • graphene: >=3.3,<4
  • pydantic: >=2,<3

Installation

# uv (recommended)
uv add django-graphex
# real-time subscriptions (adds Django Channels 4):
uv add "django-graphex[subscriptions]"
# pip
pip install django-graphex
pip install "django-graphex[subscriptions]"

The base install never imports channels; only the subscriptions extra does.

Quick start

import graphene
from django.contrib.auth.models import User
from django_graphex import (
    DjangoListObjectType, DjangoListObjectField, DjangoObjectField, DjangoModelMutation,
)
from django_graphex.paginations import LimitOffsetGraphqlPagination


class UserListType(DjangoListObjectType):
    class Meta:
        model = User
        pagination = LimitOffsetGraphqlPagination()
        filter_fields = {"username": ("icontains", "exact"), "is_active": ("exact",)}


class UserMutation(DjangoModelMutation):      # define once -> create/update/delete
    class Meta:
        model = User


class Query(graphene.ObjectType):
    users = DjangoListObjectField(UserListType)


class Mutation(graphene.ObjectType):
    user_create = UserMutation.CreateField()
    user_update = UserMutation.UpdateField()
    user_delete = UserMutation.DeleteField()


schema = graphene.Schema(query=Query, mutation=Mutation)

Query it with the nested filter: argument (and / or / not):

{
  users(filter: { is_active: { exact: true }, username: { icontains: "jo" } }) {
    results(limit: 10, ordering: "-date_joined") { id username }
    totalCount
  }
}

Configuration

All settings live under a single DJANGO_GRAPHEX dict (every key is optional):

# settings.py
DJANGO_GRAPHEX = {
    "DEFAULT_PAGINATION_CLASS": "django_graphex.paginations.LimitOffsetGraphqlPagination",
    "DEFAULT_PAGE_SIZE": 20,
    "MAX_PAGE_SIZE": 50,
    "CACHE_ACTIVE": True,
}

To use directives, add the middleware and pass all_directives to the schema:

GRAPHENE = {"MIDDLEWARE": ["django_graphex.GraphQLDirectiveMiddleware"]}

from django_graphex import all_directives
schema = graphene.Schema(query=Query, mutation=Mutation, directives=all_directives)

Documentation

📚 Full documentation — including the Quick Start, Model backend, Filtering, Pagination, Subscriptions, Settings and the Migration Guide.

License

MIT License — see the LICENSE file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_graphex-1.2.0.tar.gz (633.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_graphex-1.2.0-py3-none-any.whl (165.5 kB view details)

Uploaded Python 3

File details

Details for the file django_graphex-1.2.0.tar.gz.

File metadata

  • Download URL: django_graphex-1.2.0.tar.gz
  • Upload date:
  • Size: 633.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for django_graphex-1.2.0.tar.gz
Algorithm Hash digest
SHA256 a0bbc059812c0310f7cb9bda449c84707d8c445a3aef11c0c6f72e5d3ee5c480
MD5 e36f2784d0b93e49e55162f37faeb1cb
BLAKE2b-256 45a70cf6d3f4b096298b5d437d28a10e6a6a8381e9c41ee2f4f7a0dd1baca6fe

See more details on using hashes here.

File details

Details for the file django_graphex-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: django_graphex-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 165.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for django_graphex-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 56a70a0bb9eaf124db5a73cc7aa9014738ab68b58ba6ae165c43b91b43136756
MD5 75df6c9890ceb1de86cc3833ce125d60
BLAKE2b-256 2dbd04fbe67ec12448da6eb720cb7a65fe228de85219b05cca695f59fc170176

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page