2017-04-20 2 views
0

Nehmen wir an, ich habe eine Liste von Daten in einem Array, ich möchte nur diejenigen behalten, die abgelaufen sind, um sie später zu löschen. Aber ich versuche, eine IF-Bedingung für jedes Datum im Array zu übergeben und nur diejenigen zu drucken, die abgelaufen sind. Das Problem ist, dass ich nicht verstehe, wie ich es mit Python machen kann.Vergleichen von Offset-Naiven und -warteten Datumsangaben in Django

Hier ist, was ich dachte, tun:

# model.objects.all() contains the dates of each objects 

for data in model.objects.all(): 
    if data.created_date < datetime.datetime.now() - datetime.timedelta(seconds=20): 
     print(data.created_date) 

Der obige Code gibt mir diese Fehlermeldung:

TypeError: can't compare offset-naive and offset-aware datetimes

Was ich tue, falsch, was ist die Lösung?

+1

Python nicht über Arrays. Was Sie dort haben, sieht wie ein Django QuerySet aus. Sie sollten es mit dem richtigen '.filter()' Aufruf filtern. –

+0

@KlausD. Wie ist es möglich, Django-Queryset nach Ablaufzeit zu filtern? – Lindow

+1

https://docs.djangoproject.com/en/1.11/topics/db/queries/#field-lookups –

Antwort

1
from django.utils.timezone import now, timedelta 

expired_date = now() - timedelta(seconds=20) 

Wenn Sie möchten, um sie sehen:

model_list = YourModel.objects.filter(created_date__lt=expired_date) 

for model_item in model_list: 
    print model_item.created_date 

Wenn man sie nur entfernen möchten:

YourModel.objects.filter(created_date__lt=expired_date).delete() 
Verwandte Themen