2010-05-05 3 views
3

Dans mon point de vue j'ai la date dans le format suivant s_date=20090106 et e_date=20100106interrogation pour le champ d'horodatage dans django

Le modèle est défini comme

 class Activity(models.Model): 
      timestamp = models.DateTimeField(auto_now_add=True) 

comment interroger pour l'horodatage déposé avec les informations ci-dessus .

Activity.objects.filter(timestamp>=s_date and timestamp<=e_date) 

Merci .....

Répondre

6

Vous devez convertir votre date à une instance de datetime.datetime classe. Le moyen le plus facile de le faire pour votre cas est:

import datetime 

# 
# This creates new instace of `datetime.datetime` from a string according to 
# the pattern given as the second argument. 
# 
start = datetime.datetime.strptime(s_date, '%Y%m%d') 
end = datetime.datetime.strptime(e_date, '%Y%m%d') 

# And now the query you want. Mind that you cannot use 'and' keyword 
# inside .filter() function. Fortunately .filter() automatically ANDs 
# all criteria you provide. 
Activity.objects.filter(timestamp__gte=start, timestamp__lte=end) 

Profitez!

+1

Merci ........................ – Hulk

+0

Non. Vous ne pouvez pas faire de filtres avec> = et <=. Les arguments de filtre sont des mots-clés, pas des expressions. -1. –

+1

Point valide. Actualisé. – Bartosz

2

est ici une façon:

s_date = datetime.strptime('20090106', '%Y%m%d') 
e_date = datetime.strptime('20100106', '%Y%m%d') 
Activity.objects.filter(timestamp__gte=s_date, timestamp__lte=e_date) 

Notez que vous devez d'abord utiliser strptime pour convertir la date de votre chaîne à un objet python datetime. Deuxièmement, vous devez utiliser les méthodes gte et lte pour former une requête django.

Questions connexes