Default Filters
There are times where a view contains many more records than are typically useful for a user, e.g. they have permissions to view all but are only responsible for a subset.
In these cases, it is useful to provide Filters to allow the user to filter the records to just those that are relevant. However, even better is to have the filters automatically default to the relevant subset, thus allowing the filter widgets to be used only when the, much-rarer, requirement is to un-filter to the full subset.
This can be achieved using Default Filters.
Here is an example, used within a template, to filter staff to just those for the user's organisation/branch:
def user_org_default_filter(selector, tablename=None): """ Default filter for organisation_id: * Use the user's organisation if logged-in and associated with an organisation. """ auth = current.auth user_org_id = auth.is_logged_in() and auth.user.organisation_id if user_org_id: return user_org_id else: # no default return {} def customise_hrm_human_resource_controller(**attr): # Default Filter from s3 import s3_set_default_filter s3_set_default_filter("~.organisation_id", user_org_default_filter, tablename = "hrm_human_resource") return attr settings.customise_hrm_human_resource_controller = customise_hrm_human_resource_controller