Skip to main content

Better JSON Widget for Django Admin

Project description

django-better-json-widget

Build Status codecov pypi downloads

Better JSON Widget for Django Admin

Features

  • Better Json widget with schema for your Django Admin site
  • Can watch for changes in the given field (follow_field) and dynamically update the JSON schema
  • Supports JSON Schema
  • You can edit generated UI fields specified in schema or edit raw JSON
  • Use Vue.js for UI
  • Supports Python 3.8+ and Django 3.2+

Limitations

  • Supports only a small subset of the JSON Schema (integer, number, boolean, string types)
  • Does not support enum, list types (yet) and nested objects (not planned)

So, PR's are welcome!

Installation

Install package

pip install django-better-json-widget

Add better_json_widget to your INSTALLED_APPS

Example

from better_json_widget.widgets import BetterJsonWidget
from django.contrib import admin
from django.forms import ModelForm

from .models import TestModel


schema_mapping = {
    "animal": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
            "limbs": {
                "type": "integer",
                "title": "Number of limbs",
                "description": "How many limbs does the animal have?",
            },
            "color": {"type": "string", "title": "Color"},
            "herbivore": {
                "type": "boolean",
                "title": "Is it herbivore?",
                "default": True,
            },
        },
        "required": ["limbs", "herbivore"],
    },
    "superhero": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
            "name": {
                "type": "string",
                "title": "Name",
                "description": "Give a name to your superhero",
            },
            "superpower": {"type": "string"},
        },
        "required": ["name"],
    },
}

class TestModelAdminForm(ModelForm):
    class Meta:
        model = TestModel
        fields = "__all__"
        widgets = {
            "options": BetterJsonWidget(
                follow_field="type",
                # `schema_mapping` and `schema` can be callables
                schema_mapping=schema_mapping,
            ),
        }


@admin.register(TestModel)
class TestModelAdmin(admin.ModelAdmin):
    form = TestModelAdminForm
    fields = [
        "type",
        "options",  # JsonField
    ]

Also, if you don't need to dynamically change schema, you can use schema option:

BetterJsonWidget(
    schema={
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
            ...
        },
        "required": [],
    },
)

Settings

If for some reason you don't want to use bundled Vue.js, you can change BETTER_JSON_WIDGET_VUE_URL settings:

BETTER_JSON_WIDGET_VUE_URL = "https://unpkg.com/vue@3"

If you set this setting to None, then bundled Vue.js will not be used.

TODO

  • Improve JSON Schema support
  • Show current field value in UI
  • UI tests

License

MIT

Credits

This project was generated with yakimka/cookiecutter-pyproject.

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-better-json-widget-0.4.0.tar.gz (57.8 kB view details)

Uploaded Source

Built Distribution

django_better_json_widget-0.4.0-py3-none-any.whl (56.3 kB view details)

Uploaded Python 3

File details

Details for the file django-better-json-widget-0.4.0.tar.gz.

File metadata

  • Download URL: django-better-json-widget-0.4.0.tar.gz
  • Upload date:
  • Size: 57.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.14 CPython/3.10.5 Linux/5.13.0-1031-azure

File hashes

Hashes for django-better-json-widget-0.4.0.tar.gz
Algorithm Hash digest
SHA256 1e0954fd785c61b7a62ee940d19440d2582eab532ab43736cf4f6e1c4025ae5e
MD5 c150ee22c34972d44ae8a54c43ec4640
BLAKE2b-256 2cac28a09a15c9c37c4a1f2e9e68195bfa58aa42ff8747ed163fb6561100b6c5

See more details on using hashes here.

File details

Details for the file django_better_json_widget-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_better_json_widget-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0c49a67ccacaee7792d2bccd155f97e68b8fff2ebef5853baf638d7a86b00f75
MD5 13c83a95f6799e7fb86452a740c0f7ed
BLAKE2b-256 eb4c55b29aa3b698ef9fdd0590d10b6f3693020ced6b32c336f0cf5884cf8c39

See more details on using hashes here.

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