2015-05-13 17 views
9

W moim modelu Chcę, aby móc trwania wejściowego, jak 2 lat, 5 miesięcy itpJak powinienem używać DurationField w moim modelu?

W wersji 1,8DurationField zostało wprowadzone więc próbowałem przy użyciu że:

W mój model mam user_validPeriod = models.DurationField()

Próbując dodać nowy użytkownika z mojego panelu administratora, Jeśli próbuję wpisywać coś 2d lub 2 dni w pojawiającym się polu tekstowym, ale dostaję Enter a valid duration.

enter image description here

Czy ktoś może podać mi przykład, jak to pole ma być używany?

Odpowiedz

10

Aby użyć DurationField w Django 1.8 trzeba używać Pythona datetime.timedelta przykład tak:

Biorąc pod uwagę ten model:

from django.db import models 

class MyModel(models.Model): 
    duration = models.DurationField() 

Można ustawić okres ten sposób:

import datetime 

my_model = MyModel() 
my_model.duration = datetime.timedelta(days=20, hours=10) 

Zapytanie w ten sposób:

# Equal 
durations = MyModel.objects.filter(duration=datetime.timedelta(*args, **kwargs)) 

# Greater than or equal 
durations = MyModel.objects.filter(duration__gte=datetime.timedelta(*args, **kwargs)) 

# Less than or equal 
durations = MyModel.objects.filter(duration__lte=datetime.timedelta(*args, **kwargs)) 

Więcej informacji na temat datetime.timedelta here i DurationField here.

W panelu administratora, można wprowadzić czas trwania z ciągiem z następującym formacie: hh:mm:ss

+0

Hi Charlesthk, w swojej odpowiedzi nie wykorzystali DurationField w ogóle. Nie wspominając o tym, że nie mogę znaleźć przykładu kogoś, kto go używa. Jaki jest cel jego istnienia, jeśli nikt go nie używa? – ealiaj

+0

zredagowałem moją odpowiedź, by być bardziej jednoznacznym – Charlesthk

+0

Dzięki za edycję. Jestem pewien, że jest tak jednoznaczny, jak to tylko możliwe, ale to mój pierwszy raz, kiedy używam Django, więc będziesz musiał wybaczyć moją niewiedzę. Sposób, w jaki wiem do tej pory, aby dodać wartości do mojego modelu, a sposób, w jaki oczekiwałbym tego od administratora lub użytkownika, to poprzez formularz w panelu administracyjnym? – ealiaj

Powiązane problemy