From 611ccb288fdb7b586ae7fdcbb9c567ffa989366d Mon Sep 17 00:00:00 2001 From: Piotr Dobrowolski Date: Wed, 22 Apr 2020 18:47:44 +0200 Subject: [PATCH] Add configurable displayed columns --- formity/admin.py | 20 +++++++++++++++++++- formity/models.py | 3 +++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/formity/admin.py b/formity/admin.py index 0b2d86e..a192520 100644 --- a/formity/admin.py +++ b/formity/admin.py @@ -2,7 +2,7 @@ import enum import io import datetime import csv -from flask import redirect, flash, request, url_for, make_response, current_app, session +from flask import redirect, flash, request, url_for, make_response, current_app, session, has_request_context import flask_admin import pdfplumber from flask_admin.form import rules @@ -123,6 +123,24 @@ class FaceshieldRequestAdmin(ModelView): } column_list = ('id', 'entity_info', 'full_name', 'faceshield_full_required', 'faceshield_full_delivered', 'faceshield_front_required', 'faceshield_front_delivered', 'handling_orga', 'created', 'status') + allowed_columns = None + extra_allowed_columns = ('id',) + @property + def _list_columns(self): + self.allowed_columns = self.allowed_columns or (self.scaffold_list_columns() + list(self.extra_allowed_columns)) + columns = self.column_list or self.scaffold_list_columns() + if has_request_context() and request.args.get('columns'): + columns = [c for c in request.args.get('columns').split(',') if c in self.allowed_columns] + + return self.get_column_names( + only_columns=columns, + excluded_columns=self.column_exclude_list, + ) + + @_list_columns.setter + def _list_columns(self, value): + return None + column_editable_list = ('status', 'remarks', 'handling_orga') form_choices = { 'handling_orga': [ diff --git a/formity/models.py b/formity/models.py index c87525d..13f6c17 100644 --- a/formity/models.py +++ b/formity/models.py @@ -91,6 +91,9 @@ class FaceshieldRequest(db.Model): def __str__(self): return Markup('#{} {} ({})').format(self.id, self.id, self.entity_info, self.status.name) + def __repr__(self): + return ''.format(self.id, self.status.name) + @property def label_count(self): if self.faceshield_full_delivered % 150 == 0 and self.faceshield_full_delivered // 150 > 1: