diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2015-11-17 18:44:17 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-11-17 18:44:17 +0100 |
commit | 73450fd64ccebe7a085c939bdc81ad7597d7b4ea (patch) | |
tree | 770c3fc40ac68c70efaa8bd2c155cdf3ced1761d | |
parent | 08f5680610562ea92c6bd8f9476f047fa3ee8c57 (diff) | |
download | Ishtar-73450fd64ccebe7a085c939bdc81ad7597d7b4ea.tar.bz2 Ishtar-73450fd64ccebe7a085c939bdc81ad7597d7b4ea.zip |
Full CSV export: extra non auto columns - allow method to be called
-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:]]) |