/ / DurationField format - django, django-views

Formato DurationField - django, django-views

tengo un DurationField definido en mi modelo como

day0 = models.DurationField("Duration for Monday", default=datetime.timedelta)

Cuando intento ver esto, quiero que esté formateado como "HH: MM": siempre es menor que 24. Por lo tanto, probé estos en el archivo de plantilla HTML:

{{ slice.day0|time:"H:M" }}
{{ slice.day0|date:"H:M" }}

Sin embargo, todo lo que obtengo es un espacio vacío.

¿Qué estoy haciendo mal?

Respuestas

6 para la respuesta № 1

UN timedelta instancia no es un time o una datetime. Por lo tanto, no tiene sentido utilizar el time o date filtros

Django no viene con ningún filtro de plantilla para mostrar las timedeltas, por lo que puede escribir las suyas propias o buscar una aplicación externa que las proporcione. Puede encontrar los filtros de plantilla en django-timedelta-field útil.


4 para la respuesta № 2

Para la posteridad: esto es lo que usé al final. Este es el contenido de <app>/templatetags/datetime_filter.py:

# -*- coding: utf-8 -*-
"""Application filter for `datetime`_ 24 hours.

.. _datetime: https://docs.python.org/2/library/datetime.html
"""

from django import template
from datetime import date, timedelta

register = template.Library()

@register.filter(name="format_datetime")
def format_datetime(value):
hours, rem = divmod(value.seconds, 3600)
minutes, seconds = divmod(rem, 60)
return "{}h {}m".format(hours, minutes)

Luego, en la vista, agregue esto:

{% load datetime_filter %}
[...]
{{ slice.day0|format_datetime }}