How to customize filtering the incidents list

Incident list filtering is governed by the incident_list_filter function. By default, this function is located at argus.htmx.incidents.filter.incident_list_filter but this location can be changed by overriding the ARGUS_HTMX_FILTER_FUNCTION to point to a different function. The function has the the following signature:

def incident_list_filter(request: HttpRequest, qs: IncidentQuerySet) -> tuple[Form, IncidentQuerySet]:
    ...

The ARGUS_HTMX_FILTER_FUNCTION can either take a function directly or a dotted path to an importable function. For backwards compatibility, it is also possible to specify a dotted path to a module instead of a function. Argus will then look for a function called incident_list_filter inside that module.

When loading the incidents list, the incident_list_filter function is called with the request and the base incident queryset, and allows for updating this queryset. This way, the queryset can for example be filtered, reordered and/or data may be added (such as through annotate).

Aside from the updated queryset, incident_list_filter returns a django.forms.Form. This form is used to populate the incident filterbox and any filterable columns

Filterable columns

Argus has support for applying filters directly on the incident list column header. To do this, for example to allow the filtering “Description” column, add/update the IncidentTableColumn in your INCIDENT_TABLE_COLUMN setting:

INCIDENT_TABLE_COLUMNS = [
  ...
  IncidentTableColumn(
      "description",
      label="Description",
      cell_template="htmx/incidents/_incident_description.html",
      filter_field="description",
  ),
  ...
]

You then need to update your incident_list_filter Form to something akin to the following:

class IncidentFilterForm(forms.Form):
    ...
    description = forms.CharField(max_length=255, required=False)
    description.in_header = True
    ...

The attribute name description should match the value of the IncidentTableColumn.filter_field attribute. This will tell argus_htmx to not render a filter input for the description in the incident filter box, but to use the column header filter instead