================ Widget Reference ================ .. module:: django_filters.widgets :synopsis: Provided form widgets and their arguments. .. currentmodule:: django_filters.widgets This is a reference document with a list of the provided widgets and their arguments. .. _link-widget: .. class:: LinkWidget This widget renders each option as a link, instead of an actual . It has one method that you can override for additional customizability. ``option_string()`` should return a string with 3 Python keyword argument placeholders: 1. ``attrs``: This is a string with all the attributes that will be on the final ```` tag. 2. ``query_string``: This is the query string for use in the ``href`` option on the ```` element. 3. ``label``: This is the text to be displayed to the user. .. _boolean-widget: .. class:: BooleanWidget This widget converts its input into Python's True/False values. It will convert all case variations of ``True`` and ``False`` into the internal Python values. To use it, pass this into the ``widgets`` argument of the :class:`~django_filters.filters.BooleanFilter`: .. code-block:: python active = BooleanFilter(widget=BooleanWidget()) .. _csv-widget: .. class:: CSVWidget This widget expects a comma separated value and converts it into a list of string values. It is expected that the field class handle a list of values as well as type conversion. .. _range-widget: .. class:: RangeWidget This widget is used with :class:`~django_filters.filters.RangeFilter` and its subclasses. It generates two form input elements which generally act as start/end values in a range. Under the hood, it is Django's :class:`~django.forms.TextInput` widget and accepts the same arguments and values. To use it, pass it to ``widget`` argument of a :class:`~django_filters.filters.RangeFilter`: .. code-block:: python date_range = DateFromToRangeFilter(widget=RangeWidget(attrs={'placeholder': 'YYYY/MM/DD'})) .. class:: SuffixedMultiWidget Extends Django's builtin :class:`~django.forms.MultiWidget` to append custom suffixes instead of indices. For example, take a range widget that accepts minimum and maximum bounds. By default, the resulting query params would look like the following: .. code-block:: http GET /products?price_0=10&price_1=25 HTTP/1.1 By using ``SuffixedMultiWidget`` instead, you can provide human-friendly suffixes. .. code-block:: python class RangeWidget(SuffixedMultiWidget): suffixes = ['min', 'max'] The query names are now a little more ergonomic. .. code-block:: http GET /products?price_min=10&price_max=25 HTTP/1.1