Skip to main content

Django-implementation for PostgreSQL JSONSchema

Project description

Django PostgreSQL JSONSchema

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.

Features

  • 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.

Installation

You can install the package using pip:

pip install django-pg-jsonschema

Usage

  1. Add 'django_pg_jsonschema' to your Django project's INSTALLED_APPS in the settings module.

  2. Configure globally if you want to commit the schemas to PostgreSQL (in settings.py):

    DJANGO_PG_JSONSCHEMA = {
        'PG_COMMIT_JSONSCHEMA': True
    }
    
  3. Import the JSONSchemaField from the package:

    from django_pg_jsonschema.fields import JSONSchemaField
    
  4. 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.

  5. 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
         )
    
  6. Use the field in your Django models as you would with any other field:

    obj = Person(data={"name": "John Doe", "age": 25})
    obj.save()
    

Contribution

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.

License

This package is licensed under the Apache 2.0 License.

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_pg_jsonschema-0.1.2.tar.gz (5.7 kB view hashes)

Uploaded Source

Built Distribution

django_pg_jsonschema-0.1.2-py3-none-any.whl (7.4 kB view hashes)

Uploaded Python 3

Supported by

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