Better JSON Widget for Django Admin
Project description
django-better-json-widget
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
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
Built Distribution
Close
Hashes for django-better-json-widget-0.4.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e0954fd785c61b7a62ee940d19440d2582eab532ab43736cf4f6e1c4025ae5e |
|
MD5 | c150ee22c34972d44ae8a54c43ec4640 |
|
BLAKE2b-256 | 2cac28a09a15c9c37c4a1f2e9e68195bfa58aa42ff8747ed163fb6561100b6c5 |
Close
Hashes for django_better_json_widget-0.4.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c49a67ccacaee7792d2bccd155f97e68b8fff2ebef5853baf638d7a86b00f75 |
|
MD5 | 13c83a95f6799e7fb86452a740c0f7ed |
|
BLAKE2b-256 | eb4c55b29aa3b698ef9fdd0590d10b6f3693020ced6b32c336f0cf5884cf8c39 |