EditColumn

Base class: Column

The column class for EditTable.

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]

See after

Cookbook:

How do I reorder columns?

assets

Type: Namespace

See assets

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 code foo.bar. This parameter is based on the filter name of the Column if you use the declarative style of creating tables.

Type: str

See attr

Cookbook:

How do I access foreign key related data in a column?

What is the difference between attr and _name?

auto_rowspan     (evaluated)

enable automatic rowspan for this column. To join two cells with rowspan, just set this auto_rowspan to True and make those two cells output the same text and we’ll handle the rest.

Type: bool

Default: False

Cookbook:

How do I get rowspan on a table?

bulk

Namespace to configure bulk actions. See howto on bulk editing for an example and more information.

Type: Namespace

Cookbook:

How do I enable bulk editing?

cell

Customize the cell, see See howto on rendering and howto on links

Type: Namespace

Cookbook:

How do I create a column based on computed data (i.e. a column not based on an attribute of the row)?

How do I customize the rendering of a cell?

How do I show nested foreign key relationships?

How do I make a link in a cell?

How do I show row numbers?

What is the difference between attr and _name?

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.

See name

Cookbook:

How do I specify the title of a header?

endpoints

Type: Namespace

extra

Type: Dict[str, Any]

See extra

extra_evaluated

Type: Dict[str, Any]

See extra

extra_params

field

Type: Field

Cookbook:

How do you edit one-to-one fields in an edit table?

filter

Type: Namespace

Cookbook:

How do I enable searching/filter on columns?

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: Optional[str]

Cookbook:

How do I group columns?

header     (evaluated)

Type: Namespace

Cookbook:

How do I customize the rendering of a header?

include     (evaluated)

set this to False to hide the column

Type: bool

See include

Cookbook:

How do I show a reverse foreign key relationship?

How do I show a reverse many-to-many relationship?

How do I specify which columns to show?

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 in table.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

Cookbook:

How do I group rows?

sort_default_desc     (evaluated)

Set to True to make table sort link to sort descending first.

Type: bool

Default: False

Cookbook:

How do I set the default sort direction of a column to be descending instead of ascending?

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 column

Type: bool

Default: lambda column, **_: column.attr is not None

Cookbook:

How do I turn off sorting? (on a column or table wide)

superheader     (evaluated)

Shortcuts

EditColumn.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),
    ]
)
▼ Hide result

Defaults

  • filter__call_target__attribute
    • boolean

  • filter__field__call_target__attribute
    • boolean_tristate

  • bulk__call_target__attribute
    • boolean

  • cell__format
    • lambda value, **_: mark_safe(f'<span title="{gettext_lazy("Yes")}">&#10004;</span>') if value else ''

EditColumn.boolean_tristate

This shortcut sets up boolean_tristate for the filter.

Parent: EditColumn.boolean

Defaults

  • filter__call_target__attribute
    • boolean_tristate

EditColumn.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

EditColumn.choice_queryset

This shortcut sets up choices for the filter and bulk form for the choice queryset case.

Parent: EditColumn.choice

Defaults

  • bulk__call_target__attribute
    • choice_queryset

  • filter__call_target__attribute
    • choice_queryset

EditColumn.date

Defaults

  • filter__call_target__attribute
    • date

  • filter__query_operator_to_q_operator
    • lambda op: {'=': 'exact', ':': 'contains'}.get(op)

  • bulk__call_target__attribute
    • date

EditColumn.datetime

Defaults

  • filter__call_target__attribute
    • datetime

  • filter__query_operator_to_q_operator
    • lambda op: {'=': 'exact', ':': 'contains'}.get(op)

  • bulk__call_target__attribute
    • datetime

EditColumn.decimal

Defaults

  • bulk__call_target__attribute
    • decimal

  • filter__call_target__attribute
    • decimal

EditColumn.delete

Defaults

  • header__template
    • iommi/table/header.html

  • sortable
    • False

  • filter__is_valid_filter
    • lambda **_: (True, '')

  • filter__field__include
    • False

  • attr
    • None

  • display_name
    • Delete

  • cell__attrs__class__delete
    • True

  • assets__fancy_delete
    • `<script>
      $(document).ready(() => {
      $(‘.edit_table_delete’).click((event) => {

      const checked = $(event.target).closest(‘tr’).find(‘input’)[0].checked; $(event.target).closest(‘tr’).find(‘input’).prop(“checked”, !checked); $(event.target).closest(‘tr’)[0].style.opacity = checked ? “1.0” : “0.3”; event.preventDefault(); return false;

      });

      });

      </script>`

EditColumn.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(),
)
▼ Hide result

Parent: EditColumn.icon

Defaults

  • cell__url
    • lambda row, **_: row.get_absolute_url() + 'download/'

  • cell__value
    • lambda row, **_: getattr(row, 'pk', False)

  • display_name
    • Download

EditColumn.duration

Parent: EditColumn.text

Defaults

  • bulk__call_target__attribute
    • duration

  • filter__call_target__attribute
    • duration

EditColumn.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),
)
▼ Hide result

Parent: EditColumn.icon

Defaults

  • cell__url
    • lambda row, **_: row.get_absolute_url() + 'edit/'

  • display_name
    • Edit

EditColumn.email

Defaults

  • filter__call_target__attribute
    • email

  • bulk__call_target__attribute
    • email

EditColumn.file

Defaults

  • bulk__call_target__attribute
    • file

  • filter__call_target__attribute
    • file

  • cell__format
    • lambda value, **_: str(value)

EditColumn.float

Parent: EditColumn.number

Defaults

  • filter__call_target__attribute
    • float

  • bulk__call_target__attribute
    • float

EditColumn.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

EditColumn.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)

EditColumn.icon

Shortcut to create font awesome-style icons.

Parameters

  • extra__icon
    • the name of the icon

Defaults

  • display_name
    • ""

  • cell__value
    • lambda table, **_: True

  • cell__format
    • iommi.table.default_icon__cell__format

  • attr
    • None

EditColumn.integer

Parent: EditColumn.number

Defaults

  • filter__call_target__attribute
    • integer

  • bulk__call_target__attribute
    • integer

EditColumn.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

EditColumn.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)

EditColumn.multi_choice

This shortcut sets up choices for the filter and bulk form for the multi choice case.

Parent: EditColumn.choice

Defaults

  • bulk__call_target__attribute
    • multi_choice

  • filter__call_target__attribute
    • multi_choice

EditColumn.multi_choice_queryset

This shortcut sets up choices for the filter and bulk form for the multi choice queryset case.

Parent: EditColumn.choice_queryset

Defaults

  • bulk__call_target__attribute
    • multi_choice_queryset

  • filter__call_target__attribute
    • multi_choice_queryset

EditColumn.number

EditColumn.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(),
)
▼ Hide result

Parent: EditColumn.icon

Defaults

  • cell__url
    • lambda row, **_: row.get_absolute_url() + 'run/'

  • display_name
    • Run

EditColumn.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)
)
▼ Hide result

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)       # row_index is the visible row number       # See selection() for the code that does the lookup       else 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

  • extra__icon
    • fa fa-check-square-o

EditColumn.substring

Defaults

  • filter__query_operator_for_field
    • :

EditColumn.text

This is an explicit synonym for Column().

Defaults

  • bulk__call_target__attribute
    • text

  • filter__call_target__attribute
    • text

EditColumn.textarea

Parent: EditColumn.text

EditColumn.time

Defaults

  • filter__call_target__attribute
    • time

  • filter__query_operator_to_q_operator
    • lambda op: {'=': 'exact', ':': 'contains'}.get(op)

  • bulk__call_target__attribute
    • time

Methods

on_refine_done

Class methods

hardcoded