2009-08-06 88 views

Respuesta

6

DateTime fields siempre almacenar también segundos; Sin embargo, se puede deducir fácilmente la plantilla para mostrar solo las horas y minutos, con el filtro time:

{{ value|time:"H:M" }} 

donde "valor" es la variable que contiene el campo de fecha y hora.

Por supuesto, también puede recurrir a otros trucos, como cortar los segundos del campo mientras se guarda; que requeriría sólo un pequeño cambio en el código en la vista de manejo de la forma, de hacer algo como esto:

if form.is_valid(): 
    instance = form.save(commit=False) 
    instance.nosecs = instance.nosecs.strptime(instance.nosecs.strftime("%H:%M"), "%H:%M") 
    instance.save() 

(nota: esto es un código feo y no probado, sólo para dar la idea)

Finalmente, debe tener en cuenta que el administrador seguirá mostrando los segundos en el campo.
No debería ser una gran preocupación, sin embargo, porque el administrador solo debe ser utilizado por un tipo de usuarios que pueden recibir instrucciones de no usar esa parte del campo.
En caso de que quiera parchar también el administrador, aún puede asignar su propio widget al formulario y, por lo tanto, hacer que el administrador lo use. Por supuesto, esto significaría un esfuerzo adicional significativo.

+0

{{valor | tiempo: "H: i"}} trabajó para mí. – GvS

+1

En las formas de vistas basadas en clases de Django, estableciendo TIME_INPUT_FORMATS en las configuraciones trabajadas para mí. https://docs.djangoproject.com/en/dev/ref/settings/#time-input-formats – maciek

+0

@maciek: eso no funcionó para mí. El ajuste 'TIME_INPUT_FORMATS = [ '% H:% M', ]' en 'settings.py' no fue suficiente. Tuve que especificar el widget. – SaeX

3

Así que creo que la solución propuesta y aceptada no es óptima porque con:

datetime.widget = forms.SplitDateTimeWidget(time_format=('%H:%M')) 

Para una SplitDateTimeField en mi caso, pero por sólo cambia a TimeWidget.

Espero que ayude a otras personas también.

4

El widget Django se puede utilizar para lograr esto fácilmente.

from django import forms 

class timeSlotForm(forms.Form): 
    from_time = forms.TimeField(widget=forms.TimeInput(format='%H:%M')) 
2

modelo TimeField

en la plantilla

¿Aparece

{{ value|time:"H:i" }} 


no se muestra

{{ value|time:"H:M" }} 

Django 1.4.1

1

Para una ModelForm, usted puede agregar fácilmente un widget como este, para evitar los segundos se muestran (solo muestran hh: mm):

class MyCreateForm(forms.ModelForm): 

    class Meta: 
     model = MyModel 
     fields = ('time_in', 'time_out',) 
     widgets = { 
      'time_in': forms.TimeInput(format='%H:%M'), 
      'time_out': forms.TimeInput(format='%H:%M'), 
     }