diff options
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r-- | ishtar_common/utils.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 1d3c4d143..3abc0ddd1 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -1026,6 +1026,54 @@ def get_field_labels_from_path(model, path): return labels +def get_columns_from_class(cls, table_cols_attr="TABLE_COLS", dict_col_labels=True): + """ + Get table columns and table label from a model + :param table_cols_attr: "TABLE_COLS" if not specified + :param dict_col_labels: (default: True) if set to False return list matching + with table_cols list + :return: (table_cols, table_col_labels) + """ + col_labels = {} + slug = getattr(cls, "SLUG", None) + if hasattr(cls, "COL_LABELS"): + col_labels = cls.COL_LABELS + if slug in settings.COL_LABELS: + col_labels.update(settings.COL_LABELS[slug]) + tb_key = (slug, table_cols_attr) + if tb_key in settings.TABLE_COLS: + table_cols = settings.TABLE_COLS[tb_key] + else: + table_cols = getattr(cls, table_cols_attr) + if callable(table_cols): + table_cols = table_cols() + if dict_col_labels: + return table_cols, col_labels + table_cols_label = [] + for c in table_cols: + if c in col_labels: + table_cols_label.append(str(col_labels[c])) + else: + field_verbose_name, field_name = "", "" + field = cls + keys = c.split("__") + if "." in c: + keys = c.split(".") + for key in keys: + if hasattr(field, "remote_field") and field.remote_field: + field = field.remote_field.model + try: + field = field._meta.get_field(key) + field_verbose_name = field.verbose_name + except (fields.FieldDoesNotExist, AttributeError): + if hasattr(field, key + "_lbl"): + field_verbose_name = getattr(field, key + "_lbl") + else: + continue + table_cols_label.append(str(field_verbose_name)) + return table_cols, table_cols_label + + def create_default_areas(models=None, verbose=False): # can be used on migrations if models are provided if not models: |