Traducción automática supervisada
Este contenido se traduce mediante generación automática guiada por glosarios y guías de estilo revisados por personas. Dado que el texto no se revisa manualmente línea por línea, pueden producirse errores ocasionales o expresiones poco naturales.
En caso de cualquier discrepancia, la versión en inglés constituye la autoridad y la fuente de referencia.
Filtros
Cada campo de una página de lista puede tener su propio conjunto de operadores de filtrado, como contains, between e is null. Sus usuarios combinan estos operadores en un árbol AND/OR anidado, y usted nunca escribe una consulta de base de datos compleja.
La interfaz de administración deduce los filtros disponibles a partir del tipo subyacente del campo. Puede reducir, ampliar o reemplazar por completo ese conjunto para cualquier campo.
from starlette_admin.contrib.sqla import ModelView
class PostView(ModelView):
fields = ["id", "title", "content", "published", "created_at"]
# Enable filtering and searching for these specific fields
searchable_fields = ["title", "content", "published", "created_at"]
Consulte examples/02-filters para ver una aplicación ejecutable que cubre los filtros predeterminados, las anulaciones por campo y una subclase personalizada de BaseFilter.
Cada campo que incluya en searchable_fields obtiene un menú desplegable Filters en la barra de herramientas de la lista. Desde allí, los usuarios combinan cualquier cantidad de filtros para encontrar las filas que necesitan.
Cómo funciona el constructor de filtros
Al seleccionar el botón Filters se abre un formulario desplegable donde los usuarios construyen sus consultas:
- Add filter: Añade una fila de condición. El usuario elige un campo, selecciona un operador entre los filtros disponibles de ese campo y proporciona un valor. La entrada se adapta al operador: un cuadro de texto simple para
contains, dos cuadros parabetweeny ninguna entrada parais null. - Add group: Anida un subformulario con su propio selector
AND/OR. Úselo para construir condiciones comoA AND (B OR C). - Match all/any of the following: Establece si el nivel actual usa lógica
ANDuOR. - Apply filters: Envía el formulario como una solicitud
GET. La interfaz de administración serializa todo el árbol de filtros en un único parámetro de consultafilter, descrito en El formato de URL del filtro. - Active filters: Cada filtro activo aparece como una píldora eliminable sobre la tabla. Al seleccionar la
×, se vuelve a enviar la lista sin esa regla. Un grupo anidado se contrae en una sola píldora que los usuarios eliminan en su conjunto.
Tip
Como todo el estado del filtro reside en la URL, una lista filtrada se puede compartir. Sus usuarios pueden guardar la página en marcadores y enviar el enlace a un colega.
Anular los filtros de un campo específico
Cuando los filtros predeterminados son demasiado amplios, o necesita algo más específico, pase el argumento filters= a un campo para reemplazar su conjunto predeterminado.
Puede reducir la lista a los operadores que le interesan, ampliarla con un filtro personalizado o añadir operadores a un campo que por defecto solo tiene comprobaciones básicas de nulos, como TagsField:
from enum import Enum
from starlette_admin import (
DateTimeField,
DecimalField,
EnumField,
StringField,
TagsField,
)
from starlette_admin.contrib.sqla import ModelView
# Import the concrete filter implementations for your specific backend
from starlette_admin.contrib.sqla.filters import (
BetweenFilter,
DateInPastFilter,
DateTimeBetweenFilter,
GreaterThanFilter,
NumericEqualFilter,
)
class ProductStatus(str, Enum):
ACTIVE = "ACTIVE"
OUT_OF_STOCK = "OUT_OF_STOCK"
DISCONTINUED = "DISCONTINUED"
class ProductView(ModelView):
fields = [
"id",
StringField("name"), # Uses the default filter set, no override needed
EnumField("status", enum=ProductStatus), # Uses the default filter set
DecimalField(
"price",
# Narrowed down to just 3 of the 9 default numeric filters
filters=[GreaterThanFilter, BetweenFilter, NumericEqualFilter],
),
DateTimeField("created_at", filters=[DateTimeBetweenFilter, DateInPastFilter]),
]
Importe los filtros desde su backend
Las clases de filtro que pase a filters= deben ser las implementaciones concretas para su backend de base de datos: starlette_admin.contrib.sqla.filters, .beanie.filters, .mongoengine.filters o .tortoise.filters. Importe desde el módulo filters de su backend, no desde starlette_admin.filters.
El formato de URL del filtro
El constructor de filtros serializa su estado en el parámetro de consulta filter como una cadena compacta.
El formato es field__operator para un filtro sin valores, field__operator=value para un valor único y field__operator=value..value2 para un filtro de dos valores como between. Las reglas se unen con AND u OR, y los paréntesis anidan un grupo:
/admin/product/list?filter=created_at__between=2026-01-01..2026-01-31+AND+(price__gt=12+OR+price__eq=8)
Envuelva un valor entre comillas cuando contenga un espacio o un paréntesis: name__eq="quoted value". Un valor de lista para un filtro de selección múltiple como is one of está separado por comas y no necesita comillas: status__in=ACTIVE,OUT_OF_STOCK.
Cuando la URL contiene una cadena filter no válida, como un campo desconocido, un operador no disponible o un valor no analizable, la aplicación devuelve un error HTTP 400 en lugar de descartar silenciosamente parte de la condición.
Important
Solo los campos que incluya en searchable_fields reciben filtros. Si deja searchable_fields sin establecer, todos los campos los reciben.
Referencia de filtros integrados
La siguiente tabla enumera cada filtro disponible de forma predeterminada, el slug de URL que aparece en un enlace guardado en marcadores y el tipo de valor que espera cada uno. Los filtros marcados como «dos valores» necesitan tanto un value como un value2 en la URL, por ejemplo between=2026-01-01..2026-01-31.
| Filter | Slug | Value type | Two values? |
|---|---|---|---|
| Contains | contains |
text | |
| Does not contain | not_contains |
text | |
| Starts with | startswith |
text | |
| Ends with | endswith |
text | |
| Equal | eq |
text, number, date, datetime, or time | |
| Not equal | neq |
text or number | |
| Is null | is_null |
(none) | |
| Is not null | is_not_null |
(none) | |
| Greater than | gt |
number | |
| Less than | lt |
number | |
| Greater than or equal | gte |
number | |
| Less than or equal | lte |
number | |
| Between | between |
number, date, datetime, or time | ✓ |
| Is in the past | in_past |
(none) | |
| Is in the future | in_future |
(none) | |
| Is true | is_true |
(none) | |
| Is false | is_false |
(none) | |
| Is one of | in |
comma-separated list | |
| Is not one of | not_in |
comma-separated list |
Si necesita un filtro para un tipo de dato que los filtros integrados no cubren, como un campo JSON o un punto geográfico, consulte Filtros personalizados para escribir una subclase de BaseFilter y registrarla globalmente o por instancia de campo.
¿Qué sigue?
- Filtros personalizados: Escriba y registre una subclase de
BaseFilter. - Acciones: Añada acciones masivas y por fila a sus páginas de listas.
- Vistas: Obtenga más información sobre
searchable_fieldsy el resto de la configuración de la página de listas.