Django PostgreSQL JSONSchema is a package that provides an extension to
Django's PostgreSQL JSONField, by adding support and functions for PostgreSQL
installations with pg_jsonschema
.
This allows developers to store data in a JSONField, while running validation over the field and having the ability to generate forms for these model fields.
- Custom JSON Field: Extends Django's built-in
JSONField
to support JSON Schema validation. - PostgreSQL JSONSchema: Choose whether you want to validate the data in Python or commit the JSONSchema to the DB.
- Querying Support: Utilize Django's ORM capabilities to query and filter data stored in the JSON field.
- Schema Migration: Perform schema migrations smoothly without data loss or compatibility issues.
You can install the package using pip:
pip install django-pg-jsonschema
-
Add
'django_pg_jsonschema'
to your Django project'sINSTALLED_APPS
in the settings module. -
Configure globally if you want to commit the schemas to PostgreSQL (in
settings.py
):DJANGO_PG_JSONSCHEMA = { 'PG_COMMIT_JSONSCHEMA': True }
-
Import the
JSONSchemaField
from the package:from django_pg_jsonschema.fields import JSONSchemaField
-
In your Django model, define a field of type
JSONSchemaField
argument specifying the JSON schema:class Person(models.Model): data = JSONSchemaField(schema={ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "name": {"type": "string"}, "age": {"type": "integer", "minimum": 0}, }, "required": ["name", "age"] })
In the above example, the
data
field will store JSON objects that adhere to the specified schema. -
Optionally, you can define whether you want the check to be added as a constraint to the database:
class Person(models.Model): data = JSONSchemaField( schema={ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "name": {"type": "string"}, "age": {"type": "integer", "minimum": 0}, }, "required": ["name", "age"] }, check_schema_in_db=False )
-
Use the field in your Django models as you would with any other field:
obj = Person(data={"name": "John Doe", "age": 25}) obj.save()
Contributions to the Django JSON Field with JSON Schema Support package are welcome! If you encounter any issues, have suggestions, or want to contribute code, please open an issue
or submit a pull request on the GitHub repository: https://github.com/maxboone/django-pg-jsonschema
Please make sure to follow the contribution guidelines before submitting your contributions.
This package is licensed under the Apache 2.0 License.