diff options
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 94d754938..6a03f1f60 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -563,7 +563,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[], """ Generic treatment of tables """ - def func(request, data_type='json', full=False, force_own=False, **dct): + def func(request, data_type='json', full=False, force_own=False, + col_names=None, **dct): # check rights own = True # more restrictive by default allowed = False @@ -1098,28 +1099,32 @@ def get_item(model, func_name, default_name, extra_request_keys=[], response['Content-Disposition'] = 'attachment; filename=%s'\ % filename writer = csv.writer(response, **CSV_OPTIONS) - col_names = [] - for field_name in table_cols: - if type(field_name) in (list, tuple): - field_name = u" & ".join(field_name) - 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 - else: - try: - field = model._meta.get_field(field_name) - except: - col_names.append(u"".encode(ENCODING)) - logger.warning( - "**WARN get_item - csv export**: no col name for " - "{}\nadd explicit label to " - "EXTRA_FULL_FIELDS_LABELS attribute of " - "{}".format(field_name, model)) + if col_names: + col_names = [name.encode(ENCODING, errors='replace') + for name in col_names] + else: + col_names = [] + for field_name in table_cols: + if type(field_name) in (list, tuple): + field_name = u" & ".join(field_name) + 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)) + logger.warning( + "**WARN get_item - csv export**: no col name " + "for {}\nadd explicit label to " + "EXTRA_FULL_FIELDS_LABELS attribute of " + "{}".format(field_name, model)) + continue + col_names.append( + unicode(field.verbose_name).encode(ENCODING)) writer.writerow(col_names) for data in datas: row, delta = [], 0 @@ -1149,15 +1154,16 @@ def get_by_importer(request, slug, data_type='json', full=False, res = '{}' return HttpResponse(res, mimetype='text/plain') imp = q.all()[0].get_importer_class() - cols = [] + cols, col_names = [], [] for formater in imp.LINE_FORMAT: if not formater: continue cols.append(formater.export_field_name) + col_names.append(formater.label) obj_name = imp.OBJECT_CLS.__name__.lower() return get_item( imp.OBJECT_CLS, 'get_' + obj_name, obj_name, own_table_cols=cols - )(request, data_type, full, force_own, **dct) + )(request, data_type, full, force_own, col_names=col_names, **dct) def display_item(model, name, extra_dct=None): |