diff options
| -rw-r--r-- | archaeological_finds/models.py | 3 | ||||
| -rw-r--r-- | ishtar_common/views.py | 39 | 
2 files changed, 31 insertions, 11 deletions
| diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index 1e107a4e0..c21c56a43 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -244,6 +244,9 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):      TABLE_COLS_FOR_OPE_LBL = {          'code_patriarche__index': _("Short Id"),          'code_patriarche__code__label__index': _("Complete ID")} +    EXTRA_FULL_FIELDS = ['base_finds.short_id', 'base_finds.complete_id'] +    EXTRA_FULL_FIELDS_LABELS = {'base_finds.short_id': _(u"Short Id"), +                                'base_finds.complete_id': _("Complete ID")}      base_finds = models.ManyToManyField(BaseFind, verbose_name=_(u"Base find"),                                          related_name='find')      external_id = models.CharField(_(u"External ID"), blank=True, null=True, diff --git a/ishtar_common/views.py b/ishtar_common/views.py index c2b12e53f..ae319aa53 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -444,9 +444,13 @@ def get_item(model, func_name, default_name, extra_request_keys=[],          if own_table_cols:              table_cols = own_table_cols          else: -            table_cols = full and [field.name for field in model._meta.fields -                                   if field.name not in PRIVATE_FIELDS] \ -                or model.TABLE_COLS +            if full: +                table_cols = [field.name for field in model._meta.fields +                              if field.name not in PRIVATE_FIELDS] +                if hasattr(model, 'EXTRA_FULL_FIELDS'): +                    table_cols += model.EXTRA_FULL_FIELDS +            else: +                table_cols = model.TABLE_COLS          # manage sort tables          manual_sort_key = None          order = request_items.get('sord') @@ -511,9 +515,15 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                              if hasattr(val, 'all'):  # manage related objects                                  val = list(val.all())                                  for v in val: -                                    new_vals.append(getattr(v, ky)) +                                    v = getattr(v, ky) +                                    if callable(v): +                                        v = v() +                                    new_vals.append(v)                              elif val: -                                new_vals.append(getattr(val, ky)) +                                val = getattr(val, ky) +                                if callable(val): +                                    val = val() +                                new_vals.append(val)                          vals = new_vals                      # manage last related objects                      if vals and hasattr(vals[0], 'all'): @@ -522,7 +532,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                              new_vals += list(val.all())                          vals = new_vals                      if not my_vals: -                        my_vals = [format_val(v) for v in vals] +                        my_vals = [format_val(va) for va in vals]                      else:                          new_vals = []                          if not vals: @@ -590,12 +600,19 @@ def get_item(model, func_name, default_name, extra_request_keys=[],              writer = csv.writer(response, **CSV_OPTIONS)              col_names = []              for field_name in table_cols: -                try: -                    field = model._meta.get_field(field_name) -                except: -                    col_names.append(u"".encode(ENCODING)) +                if hasattr(model, 'EXTRA_FULL_FIELDS_LABELS') and\ +                        field_name in model.EXTRA_FULL_FIELDS_LABELS: +                    field = model.EXTRA_FULL_FIELDS_LABELS[field_name] +                    col_names.append(unicode(field).encode(ENCODING))                      continue -                col_names.append(unicode(field.verbose_name).encode(ENCODING)) +                else: +                    try: +                        field = model._meta.get_field(field_name) +                    except: +                        col_names.append(u"".encode(ENCODING)) +                        continue +                    col_names.append( +                        unicode(field.verbose_name).encode(ENCODING))              writer.writerow(col_names)              for data in datas:                  writer.writerow([val.encode(ENCODING) for val in data[1:]]) | 
