Welcome | Get started | Dive | Contribute | Topics | Reference | Changes | More
Table views with dynamic columns¶
You can define a data table with “dynamic” columns, where the initial set of columns of the table depends on certain conditions.
To see this feature in action, invoke runserver
in the
lino_book.projects.events
demo project.
See events : Publishing an event calendar for details.
Another example, which is used in production, is
lino_welfare.modlib.debts.PrintEntriesByBudget
This feature is implemented by defining different “column sets”. You must define a get_handle_name method that returns a “handle name” for each incoming request. Each handle name will will identify the table handle to be created, each of which has its own column set.
For example if you want a column set per user, you would add the user name to the default name:
from lino.core.constants import _handle_attr_name
class MyTable(...):
@classmethod
def get_handle_name(self, ar):
hname = _handle_attr_name
hname += ar.get_user().username
return hname
@classmethod
def get_column_names(self, ar):
if ar is None:
return 'foo bar baz'
return ar.get_user().column_names
The handle does not yet say which columns to use. This is given by the
get_column_names()
method, which is called for each table handle. The
column_names
returned by this method should of course depend on the same
variables as those that are used to determine the handle name.
TODO: more explanations….