2009-08-06 9 views
8

Salutations, Je suis en train d'implémenter un modèle TimeField qui ne contient que du format HH: MM (ie 16:46), je sais qu'il est possible de formater un objet temps Python mais je suis perdu sur la façon de gérer cela avec Django.Django TimeField Modèle sans secondes

Vive

Répondre

6

DateTime fields toujours aussi stocker secondes; Cependant, vous pouvez facilement dire le modèle pour afficher seulement les heures et les minutes, avec le filtre time:

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

où la « valeur » est la variable contenant le champ datetime.

Bien sûr, vous pouvez également recourir à d'autres astuces, comme couper les secondes du champ tout en économisant; il faudrait juste un petit changement au code de la vue manipulation de la forme, de faire quelque chose comme ceci:

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

(Note: ceci est un code laid et non testé, juste pour donner l'idée)

Enfin, vous devriez noter que l'administrateur affichera toujours les secondes dans le champ.
Cela ne devrait pas être un gros problème, car admin ne devrait être utilisé que par un type d'utilisateurs qui peut être chargé de ne pas utiliser cette partie du champ.
Dans le cas où vous voulez également corriger l'administrateur, vous pouvez toujours affecter votre propre widget au formulaire, et ainsi l'administrateur l'utilisera. Bien sûr, cela signifierait un effort supplémentaire important.

+0

{{valeur | temps: "H: i"}} a fonctionné pour moi. – GvS

+1

Dans les formulaires de vues basées sur les classes Django, la définition de TIME_INPUT_FORMATS dans les paramètres a fonctionné pour moi. https://docs.djangoproject.com/fr/dev/ref/settings/#time-input-formats – maciek

+0

@maciek: ça n'a pas marché pour moi. La définition de 'TIME_INPUT_FORMATS = [ '% H:% M', ]' dans 'settings.py' n'était pas suffisante. Je devais spécifier le widget. – SaeX

3

Je pense donc que la solution proposée et acceptée est pas optimale car avec:

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

Pour un SplitDateTimeField dans mon cas, mais pour vous changer seulement à TimeWidget.

Espérons que cela aide aussi les autres.

4

Le widget Django peut être utilisé pour y parvenir facilement.

from django import forms 

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

modèle TimeField

dans le modèle

s'affiche

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


n'est pas affiché

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

Django 1.4.1

1

Pour ModelForm, vous pouvez facilement ajouter un widget comme celui-ci, pour éviter les secondes étant affichés (juste montrer 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'), 
     } 
Questions connexes