diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-01-10 13:08:48 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-01-12 09:50:56 +0100 |
commit | 061edbaac5a37b8e717391c3b7d804a96c041979 (patch) | |
tree | 79a9647f9e8563d44d08123dd4844a249001e63a /ishtar_common/utils.py | |
parent | ac839d9481b863c93a9c0f92011118bb581f7c2d (diff) | |
download | Ishtar-061edbaac5a37b8e717391c3b7d804a96c041979.tar.bz2 Ishtar-061edbaac5a37b8e717391c3b7d804a96c041979.zip |
Syndication - export external sources
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: |