He estado tratando de implementar el filtrado descrito aquí: http://django-filter.readthedocs.io/en/develop/ref/filters.html#isodatetimefilter
Si bien ese método funciona, quería algo más que una coincidencia 'exacta', así que reemplacé:
fields = ['published']
con:
fields = {'published': ['exact', 'gte', 'lte']}
Esto todavía funciona para el filtrado 'exacto' con un IsoDateTime, pero para 'gte' y 'lte', falla cuando se usa un IsoDateTime. Funciona cuando se usa un DateTime.
Estoy usando una solución alternativa en este momento que funciona con IsoDateTime especificando cada búsqueda por separado:
published = django_filters.IsoDateTimeFilter(
name='published', lookup_expr='exact')
published_gte = django_filters.IsoDateTimeFilter(
name='published', lookup_expr='gte')
published_lte = django_filters.IsoDateTimeFilter(
name='published', lookup_expr='lte')
Mmm. Mi primera respuesta es simplemente aceptar esto como una limitación de la sintaxis fields
del diccionario. Declarar campos explícitamente, su "solución alternativa", es la forma canónica de hacerlo. La sintaxis del diccionario es solo un atajo, y no hay problema con que tenga limitaciones.
Habiendo dicho eso, tomaría un cambio con una huella pequeña para "arreglar" esto...
Puede usar Meta.filter_overrides
para cambiar la clase de filtro utilizada para un campo de modelo.
class BookFilter(django_filters.FilterSet):
class Meta:
model = Book
fields = {'published': ['exact', 'lte', 'gte']}
filter_overrides = {
models.DateTimeField: {'filter_class': django_filters.IsoDateTimeFilter},
}
@carltongibson Estoy feliz de aceptar la limitación. Intenté buscar una "solución" rápida, pero mi comprensión del funcionamiento interno del código es demasiado limitada en este momento:/
@rpkilby Gracias, su sugerencia funciona bien, la usaré en el futuro :)
@carltongibson ¿Le gustaría tener en cuenta esta limitación en los documentos? Me complace hacer una solicitud de incorporación de cambios si cree que es apropiado.
Comentario más útil
Puede usar
Meta.filter_overrides
para cambiar la clase de filtro utilizada para un campo de modelo.