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 | 1aa7193ce1c114da66cf2214964f32bce5afa3e1 (patch) | |
tree | 770c3fc40ac68c70efaa8bd2c155cdf3ced1761d /ishtar_common | |
parent | 49cac74d41e2bd0b5f45672687ec331e168bbf43 (diff) | |
download | Ishtar-1aa7193ce1c114da66cf2214964f32bce5afa3e1.tar.bz2 Ishtar-1aa7193ce1c114da66cf2214964f32bce5afa3e1.zip |
Full CSV export: extra non auto columns - allow method to be called
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/views.py | 39 |
1 files changed, 28 insertions, 11 deletions
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:]]) |