From 175aa0961e1cb27dae23495ea471091c7b881d9a Mon Sep 17 00:00:00 2001 From: Alexander Bogushov Date: Tue, 13 Jun 2017 09:27:11 +0500 Subject: [PATCH] Example --- README.md | 53 ++++++++ README.rst | 17 --- examples/json_editor_example/.gitignore | 2 + examples/json_editor_example/README.md | 18 +++ examples/json_editor_example/app/__init__.py | 0 examples/json_editor_example/app/admin.py | 37 ++++++ examples/json_editor_example/app/apps.py | 5 + .../app/migrations/0001_initial.py | 24 ++++ .../app/migrations/__init__.py | 0 examples/json_editor_example/app/models.py | 8 ++ examples/json_editor_example/example.png | Bin 0 -> 64040 bytes examples/json_editor_example/manage.py | 22 ++++ .../json_editor_example/project/__init__.py | 0 .../json_editor_example/project/settings.py | 124 ++++++++++++++++++ examples/json_editor_example/project/urls.py | 21 +++ examples/json_editor_example/project/wsgi.py | 16 +++ examples/json_editor_example/requirements.txt | 3 + 17 files changed, 333 insertions(+), 17 deletions(-) create mode 100644 README.md delete mode 100644 README.rst create mode 100644 examples/json_editor_example/.gitignore create mode 100644 examples/json_editor_example/README.md create mode 100644 examples/json_editor_example/app/__init__.py create mode 100644 examples/json_editor_example/app/admin.py create mode 100644 examples/json_editor_example/app/apps.py create mode 100644 examples/json_editor_example/app/migrations/0001_initial.py create mode 100644 examples/json_editor_example/app/migrations/__init__.py create mode 100644 examples/json_editor_example/app/models.py create mode 100644 examples/json_editor_example/example.png create mode 100755 examples/json_editor_example/manage.py create mode 100644 examples/json_editor_example/project/__init__.py create mode 100644 examples/json_editor_example/project/settings.py create mode 100644 examples/json_editor_example/project/urls.py create mode 100644 examples/json_editor_example/project/wsgi.py create mode 100644 examples/json_editor_example/requirements.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..306a99e --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ + # Django Administration JSON Editor + +Application adds support for editing JSONField in Django Administration via https://github.com/jdorn/json-editor. + +## Quick start + +Install application via pip: + +```bash +pip install git+https://github.com/abogushov/django-admin-json-editor +``` + +Add application to the INSTALLED_APPS settings: + +```python +INSTALLED_APPS = [ + ... + 'json_editor', + ... +] +``` + +Define schema of json field: + +```python +DATA_SCHEMA = { + 'type': 'object', + 'title': 'Data', + 'properties': { + 'text': { + 'title': 'Some text', + 'type': 'string', + 'format': 'textarea', + }, + 'status': { + 'title': 'Status', + 'type': 'boolean', + }, + }, +} +``` + +Use JSONEditorWidget to bind editor to the form field: + +```python +class JSONModelAdminForm(forms.ModelForm): + class Meta: + model = JSONModel + fields = '__all__' + widgets = { + 'data': JSONEditorWidget(DATA_SCHEMA, collapsed=False), + } +``` \ No newline at end of file diff --git a/README.rst b/README.rst deleted file mode 100644 index 157e6a6..0000000 --- a/README.rst +++ /dev/null @@ -1,17 +0,0 @@ -================================= -Django Administration JSON Editor -================================= - -Application adds support for editing JSONField in Django Administration via https://github.com/jdorn/json-editor. - -Quick start ------------ - -Add application to your INSTALLED_APPS setting like this : - -.. code-block:: python - - INSTALLED_APPS = [ - ... - 'json_editor', - ] diff --git a/examples/json_editor_example/.gitignore b/examples/json_editor_example/.gitignore new file mode 100644 index 0000000..2b85ff9 --- /dev/null +++ b/examples/json_editor_example/.gitignore @@ -0,0 +1,2 @@ +db.sqlite3 +env/ \ No newline at end of file diff --git a/examples/json_editor_example/README.md b/examples/json_editor_example/README.md new file mode 100644 index 0000000..afa8313 --- /dev/null +++ b/examples/json_editor_example/README.md @@ -0,0 +1,18 @@ +# An example of using application + +To run example to this steps: + +```bash +python3 -m venv env +. env/bin/activate +pip install -r requirements.txt +createdb json_editor_example +python manage.py migrate +python manage.py createsuperuser +python manage.py runserver +``` + +Open `http://localhost:8000/admin/app/jsonmodel/add/`. You will see: + +![Example](django-admin-json-editor/examples/json_editor_example/example.png) + diff --git a/examples/json_editor_example/app/__init__.py b/examples/json_editor_example/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/json_editor_example/app/admin.py b/examples/json_editor_example/app/admin.py new file mode 100644 index 0000000..38655c6 --- /dev/null +++ b/examples/json_editor_example/app/admin.py @@ -0,0 +1,37 @@ +from django.contrib import admin +from django import forms + +from json_editor import JSONEditorWidget + +from .models import JSONModel + + +DATA_SCHEMA = { + 'type': 'object', + 'title': 'Data', + 'properties': { + 'text': { + 'title': 'Some text', + 'type': 'string', + 'format': 'textarea', + }, + 'status': { + 'title': 'Status', + 'type': 'boolean', + }, + }, +} + + +class JSONModelAdminForm(forms.ModelForm): + class Meta: + model = JSONModel + fields = '__all__' + widgets = { + 'data': JSONEditorWidget(DATA_SCHEMA, collapsed=False), + } + + +@admin.register(JSONModel) +class JSONModelAdmin(admin.ModelAdmin): + form = JSONModelAdminForm \ No newline at end of file diff --git a/examples/json_editor_example/app/apps.py b/examples/json_editor_example/app/apps.py new file mode 100644 index 0000000..80b2c8d --- /dev/null +++ b/examples/json_editor_example/app/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AppConfig(AppConfig): + name = 'app' diff --git a/examples/json_editor_example/app/migrations/0001_initial.py b/examples/json_editor_example/app/migrations/0001_initial.py new file mode 100644 index 0000000..961131b --- /dev/null +++ b/examples/json_editor_example/app/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-06-13 04:23 +from __future__ import unicode_literals + +import django.contrib.postgres.fields.jsonb +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='JSONModel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(default={'status': False, 'text': 'some text'})), + ], + ), + ] diff --git a/examples/json_editor_example/app/migrations/__init__.py b/examples/json_editor_example/app/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/json_editor_example/app/models.py b/examples/json_editor_example/app/models.py new file mode 100644 index 0000000..662b6a0 --- /dev/null +++ b/examples/json_editor_example/app/models.py @@ -0,0 +1,8 @@ +from django.db import models +from django.contrib.postgres.fields import JSONField + +class JSONModel(models.Model): + data = JSONField(default={ + 'text': 'some text', + 'status': False, + }) \ No newline at end of file diff --git a/examples/json_editor_example/example.png b/examples/json_editor_example/example.png new file mode 100644 index 0000000000000000000000000000000000000000..6df5c8d5459dccfffcfb474f8009aad393a9cb7b GIT binary patch literal 64040 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 literal 0 HcmV?d00001 diff --git a/examples/json_editor_example/manage.py b/examples/json_editor_example/manage.py new file mode 100755 index 0000000..f522e00 --- /dev/null +++ b/examples/json_editor_example/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/examples/json_editor_example/project/__init__.py b/examples/json_editor_example/project/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/json_editor_example/project/settings.py b/examples/json_editor_example/project/settings.py new file mode 100644 index 0000000..b0515d0 --- /dev/null +++ b/examples/json_editor_example/project/settings.py @@ -0,0 +1,124 @@ +""" +Django settings for json_editor_example project. + +Generated by 'django-admin startproject' using Django 1.11.2. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'w@r7o+u6xj*7p#bhvmrip$jx%^2cmjzb2yk%dgl7#ldsq3ulcc' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + + 'json_editor', + + 'app', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'project.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'project.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'json_editor_example', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/examples/json_editor_example/project/urls.py b/examples/json_editor_example/project/urls.py new file mode 100644 index 0000000..5b8ec8c --- /dev/null +++ b/examples/json_editor_example/project/urls.py @@ -0,0 +1,21 @@ +"""json_editor_example URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url +from django.contrib import admin + +urlpatterns = [ + url(r'^admin/', admin.site.urls), +] diff --git a/examples/json_editor_example/project/wsgi.py b/examples/json_editor_example/project/wsgi.py new file mode 100644 index 0000000..84dac96 --- /dev/null +++ b/examples/json_editor_example/project/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for json_editor_example project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "json_editor_example.settings") + +application = get_wsgi_application() diff --git a/examples/json_editor_example/requirements.txt b/examples/json_editor_example/requirements.txt new file mode 100644 index 0000000..afdd8a5 --- /dev/null +++ b/examples/json_editor_example/requirements.txt @@ -0,0 +1,3 @@ +psycopg2==2.7.1 +Django==1.11.2 +git+https://github.com/abogushov/django-admin-json-editor@0.0.3 \ No newline at end of file