diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-11-17 13:31:20 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-11-17 13:31:20 +0100 |
commit | 3159c0314ec7de73ac637221017748e2a9f37d59 (patch) | |
tree | b86d4859397a7cc56d8c1b0678c38b8cb1398674 | |
parent | 4480edffabb942df4fcc6a91cb58e71a40c978a8 (diff) | |
download | Ishtar-3159c0314ec7de73ac637221017748e2a9f37d59.tar.bz2 Ishtar-3159c0314ec7de73ac637221017748e2a9f37d59.zip |
Custom forms: admin form
-rw-r--r-- | archaeological_operations/forms.py | 6 | ||||
-rw-r--r-- | ishtar_common/admin.py | 66 | ||||
-rw-r--r-- | ishtar_common/forms.py | 5 |
3 files changed, 74 insertions, 3 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 841131da6..61be371d1 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -49,7 +49,7 @@ from ishtar_common import widgets from ishtar_common.forms import FinalForm, FormSet, get_now, \ reverse_lazy, get_form_selection, TableSelect, get_data_from_formset, \ - ManageOldType + ManageOldType, CustomForm from ishtar_common.forms_common import TownFormSet, SourceForm, SourceSelect, \ get_town_field @@ -761,8 +761,10 @@ class DashboardForm(forms.Form): return fltr -class OperationFormGeneral(ManageOldType, forms.Form): +class OperationFormGeneral(ManageOldType, CustomForm, forms.Form): form_label = _(u"General") + form_admin_name = _(u"Operation - General") + form_slug = "operation-general" file_upload = True associated_models = {'scientist': Person, 'in_charge': Person, diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index c3ad21710..8045bff13 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -31,6 +31,7 @@ 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, MultiPolygonField +from django.core.cache import cache from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import render from django.template.defaultfilters import slugify @@ -38,8 +39,22 @@ from django.utils.translation import ugettext_lazy as _ from django import forms -from ishtar_common.apps import admin_site from ishtar_common import models +from ishtar_common.apps import admin_site +from ishtar_common.utils import get_cache + +from ishtar_common import forms as common_forms +from archaeological_files import forms as file_forms +from archaeological_operations import forms as operation_forms +from archaeological_context_records import forms as context_record_forms +from archaeological_finds import forms as find_forms, \ + forms_treatments as treatment_forms +from archaeological_warehouse import forms as warehouse_forms + + +ISHTAR_FORMS = [common_forms, file_forms, operation_forms, + context_record_forms, find_forms, treatment_forms, + warehouse_forms] class ImportGenericForm(forms.Form): @@ -319,11 +334,14 @@ class ImporterModelAdmin(admin.ModelAdmin): list_display = ('name', 'klass') model = models.ImporterModel + admin_site.register(models.ImporterModel, ImporterModelAdmin) class FormaterTypeAdmin(admin.ModelAdmin): list_display = ('formater_type', 'options') + + admin_site.register(models.FormaterType, FormaterTypeAdmin) @@ -331,6 +349,8 @@ class ImportAdmin(admin.ModelAdmin): list_display = ('name', 'importer_type', 'imported_file', 'user', 'state', 'creation_date') form = make_ajax_form(models.Import, {'user': 'ishtaruser'}) + + admin_site.register(models.Import, ImportAdmin) @@ -338,6 +358,8 @@ class TargetKeyGroupAdmin(admin.ModelAdmin): list_display = ('name', 'all_user_can_use', 'all_user_can_modify', 'available') search_fields = ('name',) + + admin_site.register(models.TargetKeyGroup, TargetKeyGroupAdmin) @@ -346,6 +368,8 @@ class TargetKeyAdmin(admin.ModelAdmin): 'value', 'is_set') list_filter = ("is_set", "target__column__importer_type") search_fields = ('target__target', 'value', 'key') + + admin_site.register(models.TargetKey, TargetKeyAdmin) @@ -353,12 +377,15 @@ class OperationTypeAdmin(GeneralTypeAdmin): list_display = GeneralTypeAdmin.list_display + ['order', 'preventive'] model = models.OperationType + admin_site.register(models.OperationType, OperationTypeAdmin) class SpatialReferenceSystemAdmin(GeneralTypeAdmin): list_display = GeneralTypeAdmin.list_display + ['order', 'srid'] model = models.SpatialReferenceSystem + + admin_site.register(models.SpatialReferenceSystem, SpatialReferenceSystemAdmin) @@ -418,6 +445,43 @@ class JsonDataFieldAdmin(admin.ModelAdmin): admin_site.register(models.JsonDataField, JsonDataFieldAdmin) +def get_choices_form(): + cache_key, value = get_cache(models.CustomForm, ['associated-forms']) + if value: + return value + forms = set() + for app_form in ISHTAR_FORMS: + for form in dir(app_form): + if 'Form' not in form: + # not very clean... but do not treat inappropriate items + continue + form = getattr(app_form, form) + if not issubclass(form, common_forms.CustomForm)\ + or not getattr(form, 'form_slug', None): + continue + forms.add((form.form_slug, form.form_admin_name)) + forms = list(forms) + cache.set(cache_key, forms, settings.CACHE_TIMEOUT) + return forms + + +class CustomFormForm(forms.ModelForm): + class Meta: + model = models.CustomForm + exclude = [] + form = forms.ChoiceField(label=_(u"Form"), choices=get_choices_form) + users = AutoCompleteSelectMultipleField('ishtaruser', required=False, + label=_(u"Users")) + + +class CustomFormAdmin(admin.ModelAdmin): + list_display = ['name', 'form', 'available'] + form = CustomFormForm + + +admin_site.register(models.CustomForm, CustomFormAdmin) + + class AdministrationScriptAdmin(admin.ModelAdmin): list_display = ['name', 'path'] diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 5c3de7b77..d0c2bb035 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -298,6 +298,11 @@ class ManageOldType(object): self.fields[field_name].help_text = model.get_help() +class CustomForm(object): + form_admin_name = "" + form_slug = "" + + class DocumentGenerationForm(forms.Form): """ Form to generate document by choosing the template |