diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-05-23 12:58:38 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-12 08:49:06 +0200 | 
| commit | 88c9aeaeafd9bc77decbf0982be0fd9d20fd3993 (patch) | |
| tree | 1e9650dcdfb9359e6c1a70031f7705d18700374d /ishtar_common/models.py | |
| parent | b40361b7c1b8e98690b1f4cf6b5154f8b22395ff (diff) | |
| download | Ishtar-88c9aeaeafd9bc77decbf0982be0fd9d20fd3993.tar.bz2 Ishtar-88c9aeaeafd9bc77decbf0982be0fd9d20fd3993.zip | |
Wizards - JSON fields: inlines for custom form in admin pages (refs #4089)
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 45 | 
1 files changed, 38 insertions, 7 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 0900b2d9a..bb285883f 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1817,19 +1817,25 @@ class CustomForm(models.Model):      @classmethod      def register(cls): -        if hasattr(cls, '_register'): -            return cls._register +        if hasattr(cls, '_register') and hasattr(cls, '_register_fields'): +            return cls._register, cls._register_fields          cache_key, value = get_cache(cls.__class__, ['dct-forms'],                                       app_label='ishtar_common') -        if value: +        cache_key_fields, value_fields = get_cache( +            cls.__class__, ['dct-fields'], app_label='ishtar_common') +        if value and value_fields:              cls._register = value -            return cls._register -        cls._register = {} +            cls._register_fields = value_fields +            return cls._register, cls._register_fields +        cls._register, cls._register_fields = {}, {}          # ideally should be improved but only used in admin          from ishtar_common.admin import ISHTAR_FORMS          from ishtar_common.forms import CustomForm as CustomFormForm          for app_form in ISHTAR_FORMS: +            app_name = app_form.__package__ +            if app_name == "archaeological_files_pdl": +                app_name = "archaeological_files"              for form in dir(app_form):                  if 'Form' not in form:                      # not very clean... but do not treat inappropriate items @@ -1839,15 +1845,40 @@ class CustomForm(models.Model):                          or not issubclass(form, CustomFormForm) \                          or not getattr(form, 'form_slug', None):                      continue +                model_name = form.form_slug.split('-')[0].replace('_', '') +                if app_name not in cls._register_fields: +                    cls._register_fields[app_name] = [] +                if model_name not in cls._register_fields[app_name]: +                    cls._register_fields[app_name].append(model_name)                  cls._register[form.form_slug] = form -        return cls._register +        return cls._register, cls._register_fields      def get_form_class(self): -        register = self.register() +        register, register_fields = self.register()          if self.form not in self._register:              return          return register[self.form] +    def get_available_json_fields(self): +        register, register_fields = self.register() +        if self.form not in self._register: +            return [] +        current_form = register[self.form] +        app_name = current_form.__module__.split('.')[0] +        if app_name == "archaeological_files_pdl": +            app_name = "archaeological_files" +        if app_name not in register_fields: +            return [] +        res = [] +        for model_name in register_fields[app_name]: +            ct = ContentType.objects.get(app_label=app_name, model=model_name) +            for json_field in JsonDataField.objects.filter( +                    content_type=ct).all(): +                res.append((json_field.pk, u"{} ({})".format( +                    json_field.name, +                    dict(JSON_VALUE_TYPES)[json_field.value_type]))) +        return res +  class ExcludedField(models.Model):      custom_form = models.ForeignKey(CustomForm, related_name='excluded_fields') | 
