diff options
-rw-r--r-- | ishtar_common/data_importer.py | 4 | ||||
-rw-r--r-- | ishtar_common/models.py | 1 | ||||
-rw-r--r-- | ishtar_common/views.py | 54 |
3 files changed, 34 insertions, 25 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 61fae2721..d4000b4c1 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -47,7 +47,8 @@ class ImportFormater(object): through_unicity_keys=None, duplicate_fields=[], regexp=None, regexp_formater_args=[], force_value=None, post_processing=False, concat=False, concat_str=False, - comment="", force_new=None, export_field_name=None): + comment="", force_new=None, export_field_name=None, + label=""): self.field_name = field_name if export_field_name: self.export_field_name = export_field_name @@ -71,6 +72,7 @@ class ImportFormater(object): self.concat_str = concat_str self.comment = comment self.force_new = force_new + self.label = label def reinit_db_target(self, db_target, nb=0): if not self.formater: diff --git a/ishtar_common/models.py b/ishtar_common/models.py index f22600d12..a2341abdc 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1830,6 +1830,7 @@ class ImporterType(models.Model): (field.field_name, field.force_new, field.concat, field.concat_str) for field in column.duplicate_fields.all()] + formater_kwargs['label'] = column.label formater_kwargs['required'] = column.required formater_kwargs['force_new'] = force_news if column.export_field_name: 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): |