diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-10-17 18:29:02 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-10-17 18:29:02 +0200 |
commit | 0792d90fe262885d5e1e22faf03d2d97b7d4c467 (patch) | |
tree | e1da1fbce3ef8228e0cce2c092accb1d64f795b2 | |
parent | 99392d78cdf5224fdedcfd8775ab1518307d9f96 (diff) | |
download | Ishtar-0792d90fe262885d5e1e22faf03d2d97b7d4c467.tar.bz2 Ishtar-0792d90fe262885d5e1e22faf03d2d97b7d4c467.zip |
Json fields: register admin models for management (refs #3077)
-rw-r--r-- | ishtar_common/admin.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index fbd9f4d29..aa323dc5f 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -27,6 +27,7 @@ from django.conf import settings from django.contrib import admin from django.contrib.auth.admin import GroupAdmin, UserAdmin from django.contrib.auth.models import Group, User +from django.contrib.contenttypes.models import ContentType from django.contrib.sites.admin import SiteAdmin from django.contrib.sites.models import Site from django.contrib.gis.forms import PointField, OSMWidget @@ -356,6 +357,56 @@ class ItemKeyAdmin(admin.ModelAdmin): admin_site.register(models.ItemKey, ItemKeyAdmin) +class JsonContentTypeFormMixin(object): + class Meta: + model = models.JsonDataSection + exclude = [] + + def __init__(self, *args, **kwargs): + super(JsonContentTypeFormMixin, self).__init__(*args, **kwargs) + choices = [] + for pk, label in self.fields['content_type'].choices: + if not pk: + choices.append((pk, label)) + continue + ct = ContentType.objects.get(pk=pk) + model_class = ct.model_class() + if hasattr(model_class, 'data') and \ + not hasattr(model_class, 'history_type'): + choices.append((pk, label)) + self.fields['content_type'].choices = sorted(choices, + key=lambda x: x[1]) + + +class JsonDataSectionForm(JsonContentTypeFormMixin, forms.ModelForm): + class Meta: + model = models.JsonDataSection + exclude = [] + + +class JsonDataSectionAdmin(admin.ModelAdmin): + list_display = ['name', 'content_type', 'order'] + form = JsonDataSectionForm + + +admin_site.register(models.JsonDataSection, JsonDataSectionAdmin) + + +class JsonDataFieldForm(JsonContentTypeFormMixin, forms.ModelForm): + class Meta: + model = models.JsonDataField + exclude = [] + + +class JsonDataFieldAdmin(admin.ModelAdmin): + list_display = ['name', 'content_type', 'key', 'display', + 'order', 'section'] + form = JsonDataFieldForm + + +admin_site.register(models.JsonDataField, JsonDataFieldAdmin) + + class AdministrationScriptAdmin(admin.ModelAdmin): list_display = ['name', 'path'] |