Django

2012-04-06 12 views
9

में दिनांक और दिनांक की तुलना मैं एक datetime क्षेत्र के साथ एक मॉडल है:Django

class MyModel(models.Model): 
    created = models.DateTimeField(auto_now = True) 

मैं सभी आज बनाया रिकॉर्ड करना चाहते हैं।

मैंने कोशिश की:

MyModel.objects.all().filter(created = timezone.now()) 

और

MyModel.objects.all().filter(created = timezone.now().date()) 

लेकिन हमेशा एक खाली सेट मिला है। Django में ऐसा करने का सही तरीका क्या है?

संपादित करें:

यह अजीब लगता है, लेकिन एक रिकॉर्ड बनाया, आज (06.04.2012 23:09:44) डेटाबेस में तिथि (2012-04-07 04:09:44) है। जब मैं इसे व्यवस्थापक पैनल में संपादित करने की कोशिश कर रहा हूं तो यह सही दिखता है (06.04.2012 23:09:44)। क्या Django इसे किसी भी तरह से संभालता है?

+1

ऐसा लगता है कि आप समय क्षेत्र मुद्दों में चला रहे हैं। डेटाबेस में यूटीसी के रूप में समय क्षेत्र में जानकारी के साथ [प्रलेखन] (https://docs.djangoproject.com/en/1.4/topics/i18n/timezones/) Django दुकान दिनांक के अनुसार। – mklauber

उत्तर

13

एक और अधिक उचित समाधान हो सकता है, लेकिन एक त्वरित workup चलता है कि यह काम करेगा:

from datetime import timedelta 

start_date = timezone.now().date() 
end_date = start_date + timedelta(days=1) 
Entry.objects.filter(created__range=(start_date, end_date)) 

मैं यह सोचते कर रहा हूँ समय क्षेत्र एक datetime जैसी वस्तु है।

महत्वपूर्ण बात यह है कि आप एक सही समय भंडारण कर रहे हैं, मिलीसेकंड करने के लिए नीचे, और आप कुछ ही दिन के लिए सटीकता है कि करने के लिए यह तुलना कर रहे है। घंटों, मिनटों और सेकंडों को टॉस करने के बजाए, डीजेंगो/पायथन उन्हें 0 पर डिफॉल्ट करता है। इसलिए यदि आपका रिकॉर्ड 2011-4-6T06: 34: 14am पर बनाया गया है, तो यह 2011-4-6T की तुलना करता है: 06: 34: 14am 2011-4-6T00: 00: 00, 2011-4-6 (बनाई गई तारीख से) 2011-4-6 तक (timezone.now() से दिनांक())। सहायक?

+0

समझे कि ... यह अजीब लगता है, लेकिन एक रिकॉर्ड बनाया, आज (06.04.2012 23:09:44) डेटाबेस में तिथि (2012-04-07 04:09:44) है। क्या Django इसे किसी भी तरह से संभालता है? –

+0

इससे मदद मिली, धन्यवाद! –

+0

@Just_Mad, Yep, django डेटाबेस में यूटीसी के रूप में सब कुछ स्टोर करता है। – mklauber

0

2015 में कहीं चूंकि यह

from datetime import datetime 
now=datetime.now() 
YourModel.objects.filter(datetime_published=datetime(now.year, now.month, now.day)) 
+2

काम नहीं करेगा, तो आप अभी भी 2011-04-06TXX की तुलना कर दिया जाएगा: करने के लिए 2011-04-06T00 XX:: 00: 00 XX। यह झूठा होगा, कोई भी वापस नहीं। – mklauber

+0

मुझे नहीं लगता कि यह कैसे काम नहीं करना चाहिए। यह तालिका से चुनें * चुनें * दिनांक = '2002-04-05' " – luke14free

+0

YourModel.objects.filter (बनाया गया