JsonEditor Integration mit Django Admin

Ich arbeite an der Integration von JSONEditor in den Django Admin. In meinem Modell gibt es ein Feld, in dem Postgres JSON verwendet wird, und der Tree-Editor in dieser Bibliothek ist perfekt.

models.py
class Executable(models.Model):
    """ Simplified model for sake of the question."""

    recipe = JSONField(null=True, blank=True)

Ich habe ordentliche Fortschritte gemacht (glaube ich), die JSONEditor-Bibliothek in den entsprechenden Erstellungs- / Bearbeitungsbildschirm im Django-Admin zu integrieren. Die Daten sind wird angezeigt beim Laden korrekt, aber aus irgendeinem Grund werden die Änderungen nicht gespeichert, wenn ich Änderungen im JSONEditorWidget vornehme. Ich bin sicher, es gibt einigesave Überschreiben Sie, dass ich daran arbeiten muss oder dass mir etwas Offensichtliches fehlt, aber ich bin mir nicht sicher, wohin ich von hier aus gehen soll.

admin.py
import json
from django import forms, utils
from django.contrib import admin

from .models import Executable


class JSONEditorWidget(forms.Widget):
    html_template = """
        <div id='%(name)s_editor_holder'></div>
        <script type="text/javascript">
                var options = {
                    "mode": "tree",
                    "search": true
                };
                var %(name)s_editor = new JSONEditor(container, options);
                var json = %(value)s
                %(name)s_editor.set(json);
                %(name)s_editor.expandAll();

                var json = %(name)s_editor.get(json);
        </script>
        <textarea readonly class="vLargeTextField" cols="40" id="id_%(name)s" name="%(name)s" rows="2" height="20px">%(value)s</textarea>
    """
    def __init__(self, attrs=None, formats=None, defaults=None):
        self.formats = formats
        self.defaults = defaults
        super(JSONEditorWidget, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        if isinstance(value, basestring):  # Edit existing instance
            value = json.loads(value)
        result = self.html_template % {
            'name': name,
            'value': json.dumps(value)
        }
        return utils.safestring.mark_safe(result)


class ExecutableForm(forms.ModelForm):
    recipe = forms.CharField(widget=JSONEditorWidget())    # Kwargs here?

    class Meta:
        model = Executable
        fields = '__all__'

    class Media:
        css = {
            'all': ('http://www.jsoneditoronline.org/app.min.css',)  # TEMP
        }
        js = (
            'http://www.jsoneditoronline.org/app.min.js',   # TEMP
            )


class ExecutableAdmin(admin.ModelAdmin):
    model = Executable
    form = ExecutableForm
    fields = (('request', 'status'), 'recipe')


admin.site.register(Executable, ExecutableAdmin)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage