/ / Formato DurationField - django, django-views

Formato DurationField - Django, viste Django

Ho un DurationField definito nel mio modello come

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

Quando provo a visualizzarlo, lo voglio formattato come "HH: MM" - È sempre inferiore a 24. Quindi, ho provato questi nel file modello HTML:

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

Tuttavia, tutto ciò che ottengo è uno spazio vuoto.

Che cosa sto facendo di sbagliato?

risposte:

6 per risposta № 1

UN timedelta istanza non è un time o a datetime. Pertanto non ha senso utilizzare il file time o date filtri.

Django non include alcun filtro modello per visualizzare i timedelt, quindi puoi scrivere il tuo o cercare un'app esterna che li fornisca. È possibile trovare i filtri dei modelli in django-timedelta-campo utile.


4 per risposta № 2

Per i posteri: ecco quello che ho usato alla fine. Questo è il contenuto di <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)

Quindi, nella vista, aggiungi questo:

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