Column#
Base class: Part
Class that describes a column, i.e. the text of the header, how to get and display the data in the cell, etc.
See Table for more complete examples.
Parameters with the prefix filter__
will be passed along downstream to the Filter
instance if applicable. This can be used to tweak the filtering of a column.
Refinable members#
after
(evaluated)Set the order of columns, see the howto on ordering for an example.
Type:
Union[int, str]
assets
Type:
Namespace
attr
(evaluated)What attribute to use, defaults to same as name. Follows django conventions to access properties of properties, so
foo__bar
is equivalent to the python codefoo.bar
. This parameter is based on the filter name of the Column if you use the declarative style of creating tables.Type:
str
auto_rowspan
(evaluated)enable automatic rowspan for this column. To join two cells with rowspan, just set this
auto_rowspan
toTrue
and make those two cells output the same text and we’ll handle the rest.Type:
bool
Default:
False
bulk
Namespace to configure bulk actions. See howto on bulk editing for an example and more information.
Type:
Namespace
cell
Customize the cell, see See howto on rendering and howto on links
Type:
Namespace
choices
(evaluated)Type:
Iterable
data_retrieval_method
(evaluated)Default:
DataRetrievalMethods.attribute_access
display_name
the text of the header for this column. By default this is based on the
_name
so normally you won’t need to specify it.
endpoints
Type:
Namespace
extra
Type:
Dict[str, Any]
extra_evaluated
Type:
Dict[str, Any]
extra_params
filter
Type:
Namespace
group
(evaluated)string describing the group of the header. If this parameter is used the header of the table now has two rows. Consecutive identical groups on the first level of the header are joined in a nice way.
Type:
Union[str, NoneType]
header
(evaluated)Type:
Namespace
include
(evaluated)set this to
False
to hide the columnType:
bool
iommi_style
Type:
str
model
(evaluated)Type:
Type[django.db.models.base.Model]
model_field
model_field_name
render_column
(evaluated)If set to
False
the column won’t be rendered in the table, but still be available intable.columns
. This can be useful if you want some other feature from a column like filtering.Type:
bool
Default:
True
row_group
(evaluated)Type:
Namespace
sort_default_desc
(evaluated)Set to
True
to make table sort link to sort descending first.Type:
bool
Default:
False
sort_key
string denoting what value to use as sort key when this column is selected for sorting. (Or callable when rendering a table from list.)
sortable
(evaluated)set this to
False
to disable sorting on this columnType:
bool
Default:
lambda column, **_: column.attr is not None
superheader
(evaluated)
Shortcuts#
boolean
#
Shortcut to render booleans as a check mark if true or blank if false.
table = Table(
columns__name=Column(),
columns__boolean=Column.boolean(),
rows=[
Struct(name='true!', boolean=True),
Struct(name='false!', boolean=False),
]
)
Defaults#
filter__call_target__attribute
boolean
filter__field__call_target__attribute
boolean_tristate
bulk__call_target__attribute
boolean
cell__format
lambda value, **_: mark_safe('<i class="fa fa-check" title="Yes"></i>') if value else ''
boolean_tristate
#
This shortcut sets up boolean_tristate
for the filter.
Defaults#
filter__call_target__attribute
boolean_tristate
choice
#
This shortcut sets up choices
for the filter and bulk form.
Defaults#
bulk__call_target__attribute
choice
bulk__choices
iommi.table.get_choices_from_column
filter__call_target__attribute
choice
filter__choices
iommi.table.get_choices_from_column
choice_queryset
#
This shortcut sets up choices
for the filter and bulk form for the choice queryset case.
Defaults#
bulk__call_target__attribute
choice_queryset
filter__call_target__attribute
choice_queryset
date
#
Defaults#
filter__call_target__attribute
date
filter__query_operator_to_q_operator
lambda op: {'=': 'exact', ':': 'contains'}.get(op)
bulk__call_target__attribute
date
datetime
#
Defaults#
filter__call_target__attribute
datetime
filter__query_operator_to_q_operator
lambda op: {'=': 'exact', ':': 'contains'}.get(op)
bulk__call_target__attribute
datetime
decimal
#
Defaults#
bulk__call_target__attribute
decimal
filter__call_target__attribute
decimal
delete
#
Shortcut for creating a clickable delete icon. The URL defaults to your_object.get_absolute_url() + 'delete/'
. Specify the option cell__url to override.
table = Table(
auto__model=Album,
columns__delete=Column.delete(),
)
Defaults#
cell__url
lambda row, **_: row.get_absolute_url() + 'delete/'
display_name
Delete
download
#
Shortcut for creating a clickable download icon. The URL defaults to your_object.get_absolute_url() + 'download/'
. Specify the option cell__url to override.
table = Table(
auto__model=Album,
columns__download=Column.download(),
)
Defaults#
cell__url
lambda row, **_: row.get_absolute_url() + 'download/'
cell__value
lambda row, **_: getattr(row, 'pk', False)
display_name
Download
edit
#
Shortcut for creating a clickable edit icon. The URL defaults to your_object.get_absolute_url() + 'edit/'
. Specify the option cell__url to override.
table = Table(
auto__model=Album,
columns__edit=Column.edit(after=0),
)
Defaults#
cell__url
lambda row, **_: row.get_absolute_url() + 'edit/'
display_name
Edit
email
#
Defaults#
filter__call_target__attribute
email
bulk__call_target__attribute
email
file
#
Defaults#
bulk__call_target__attribute
file
filter__call_target__attribute
file
cell__format
lambda value, **_: str(value)
float
#
Defaults#
filter__call_target__attribute
float
bulk__call_target__attribute
float
foreign_key
#
Defaults#
bulk__call_target__attribute
foreign_key
filter__call_target__attribute
foreign_key
data_retrieval_method
DataRetrievalMethods.select
sort_key
iommi.table.foreign_key__sort_key
foreign_key_reverse
#
Defaults#
bulk__call_target__attribute
foreign_key_reverse
filter__call_target__attribute
foreign_key_reverse
cell__format
lambda value, **_: ', '.join(['%s' % x for x in value.all()])
data_retrieval_method
DataRetrievalMethods.prefetch
sortable
False
extra__django_related_field
True
display_name
lambda column, **_: capitalize(column.model_field.remote_field.model._meta.verbose_name_plural)
icon
#
Shortcut to create font awesome-style icons.
Parameters#
extra__icon
the font awesome name of the icon
Defaults#
display_name
""
cell__value
lambda table, **_: True
cell__format
iommi.table.default_icon__cell__format
attr
None
integer
#
Defaults#
filter__call_target__attribute
integer
bulk__call_target__attribute
integer
link
#
Shortcut for creating a cell that is a link. The URL is the result of calling get_absolute_url()
on the object.
many_to_many
#
Defaults#
bulk__call_target__attribute
many_to_many
filter__call_target__attribute
many_to_many
cell__format
lambda value, **_: ', '.join(['%s' % x for x in value.all()])
data_retrieval_method
DataRetrievalMethods.prefetch
sortable
False
extra__django_related_field
True
many_to_many_reverse
#
Defaults#
bulk__call_target__attribute
many_to_many_reverse
filter__call_target__attribute
many_to_many_reverse
display_name
lambda column, **_: capitalize(column.model_field.remote_field.model._meta.verbose_name_plural)
multi_choice
#
This shortcut sets up choices
for the filter and bulk form for the multi choice case.
Defaults#
bulk__call_target__attribute
multi_choice
filter__call_target__attribute
multi_choice
multi_choice_queryset
#
This shortcut sets up choices
for the filter and bulk form for the multi choice queryset case.
Defaults#
bulk__call_target__attribute
multi_choice_queryset
filter__call_target__attribute
multi_choice_queryset
number
#
run
#
Shortcut for creating a clickable run icon. The URL defaults to your_object.get_absolute_url() + 'run/'
. Specify the option cell__url to override.
table = Table(
auto__model=Album,
columns__run=Column.run(),
)
Defaults#
cell__url
lambda row, **_: row.get_absolute_url() + 'run/'
display_name
Run
select
#
Shortcut for a column of checkboxes to select rows. This is useful for implementing bulk operations.
By default tables have a column named select
that is hidden that is used for this purpose, so you only
need to turn it on to get it. See the example below.
To implement a custom post handler that operates on the selected rows, do
def my_handler(table):
rows = table.selection()
# rows will either be a queryset, or a list of elements
# matching the type of rows of the table
...
table = Table(
auto__model=Album,
columns__select__include=True,
bulk__actions__submit=Action.submit(post_handler=my_handler)
)
Parameters#
extra__checkbox_name
the name of the checkbox. Default is `"pk"
, resulting in checkboxes like"pk_1234"
.`
extra__checked
callable to specify if the checkbox should be checked initially. Defaults to `False
.`
Defaults#
header__template
iommi/table/select_column_header.html
sortable
False
filter__is_valid_filter
lambda **_: (True, '')
filter__field__include
False
attr
None
cell__value
lambda table, cells, row, **_: ( row.pk if isinstance(table.rows, QuerySet) else # row_index is the visible row number # See selection() for the code that does the lookup cells.row_index )
cell__format
lambda column, row, value, **kwargs: format_html( # language=HTML '<input type="checkbox" class="checkbox" name="{checkbox_name}_{row_id}" {checked_str} />', checkbox_name=column.extra.checkbox_name, row_id=value, checked_str=( 'checked' if evaluate_strict(column.extra.checked, column=column, row=row, value=value, **kwargs) else '' ), )
extra__checkbox_name
pk
extra__checked
lambda **_: False
substring
#
Defaults#
filter__query_operator_for_field
:
text
#
This is an explicit synonym for Column()
.
Defaults#
bulk__call_target__attribute
text
filter__call_target__attribute
text
textarea
#
time
#
Defaults#
filter__call_target__attribute
time
filter__query_operator_to_q_operator
lambda op: {'=': 'exact', ':': 'contains'}.get(op)
bulk__call_target__attribute
time