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.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94fc9b9ade209b5976626b6e35ed53c2630edcae3a32b038069cabab0751dc25 |
|
MD5 | 460dbe94363e54a748c30532172f8995 |
|
BLAKE2b-256 | 5cd35dd17406fd0f118075c0c7071b2b362138d8f7951e5dfd76e00fcd68dde7 |
Close
Hashes for django_better_json_widget-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2cf4351eaff4657288118678af8d3fb55d291bbe7091b1bf8f33ce68e5b4b435 |
|
MD5 | d6158dc841fdf123ab0ea3db6b3b920f |
|
BLAKE2b-256 | 82efc3d9e9a4878f67a4f64316837e38bf96f27ef0ceb023180165a17a39c8c1 |