Columnas de tabla¶
Configura listados con TableBuilder y ColumnBuilder; el widget data-table consume la configuración emitida.
Cuándo usar¶
- Página list de un
ResourceBuilder. - Tabla dentro de un
RelationBuilder. - Dashboard manual con widget
data-table/api-table(alias legacy).
Ejemplo mínimo¶
.table(
lambda t: (
t.path("/api/v1/clients/clients")
.title("Clientes")
.page_size(25)
.default_sort("name")
.columns(
lambda c: (
c.text("name", "Nombre", sortable=True, searchable=True)
.text("email", "Email")
.badge("status", "Estado")
)
)
.filters(lambda f: f.text("name", "Nombre", field="name"))
.actions(
lambda a: (
a.edit("/api/v1/clients/clients/{id}/edit", "Editar")
.view("/api/v1/clients/clients/{id}", "Ver")
)
)
)
)
ColumnBuilder¶
| Método | Tipo | Notas |
|---|---|---|
.text() | text | Texto plano |
.badge() | badge | Estado con color |
.date() | date | Fecha |
.boolean() | boolean | Sí/No |
.money() | money | Importe |
Opciones: sortable=True, searchable=True.
FilterBuilder¶
| Método | kind |
|---|---|
.text() | text |
.boolean() | boolean |
.select() | select |
.ternary() | ternary |
Los filtros envían filter[campo]=valor al listado. Tu API puede ignorarlos o aplicar apply_list_query.
TableBuilder adicional¶
| Método | Efecto |
|---|---|
.path(str) | URL de datos |
.title(str) | Título del widget |
.page_size(int) | Filas por página (default 25) |
.default_sort(str) | Campo inicial |
.bulk_actions(fn) | Operaciones masivas |
.summaries(...) | Totales por columna |
.grid(xs=12, md=6) | Span en layout grid |
Contrato HTTP¶
La tabla espera respuesta { items, meta } o array. Ver API REST.
Query: page, pageSize, sort, search, filter[field].
Cada fila necesita id para acciones y selección múltiple.
Siguiente paso¶
Acciones — botones de fila, cabecera y bulk.