2016-03-17 15 views
5

Ho un DurationField definito nel mio modello comeDurationField formato

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

Quando provo a visualizzare questa, lo voglio formattato come "HH: MM" - E 'sempre inferiore a 24. Così, li ho provati nel file modello HTML:

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

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

Cosa sto sbagliando?

risposta

6

Un'istanza timedelta non è un time o un datetime. Pertanto non ha senso utilizzare i filtri time o date.

Django non viene fornito con alcun filtro modello per visualizzare i timedeltas, quindi puoi scriverne uno tuo oppure cercare un'app esterna che li fornisca. È utile trovare i filtri dei modelli in django-timedelta-field utili.

3

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

Poi nella vista, aggiungere questo:

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