Django के साथ दो तिथियों के बीच चयन करें


116

मैं एक क्वेरी बनाना चाहता हूं जो Django के साथ तारीखों के बीच का चयन करती है।

मुझे पता है कि यह कच्चे एसक्यूएल के साथ आसानी से कैसे किया जाता है, लेकिन यह कैसे Django ORM का उपयोग करके प्राप्त किया जा सकता है?

यह वह जगह है जहां मैं अपनी क्वेरी में 30 दिनों की तारीखों को जोड़ना चाहता हूं:

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')

जवाबों:


230

__rangeऑपरेटर का उपयोग करें :

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))

क्या "create_at" एक मॉडल में एक मनमाना क्षेत्र है या क्या यह डेटाबेस वास्तविक लॉग है जब रिकॉर्ड बनाया गया था?
Bigbob556677

@ Philip556677 यह एक मॉडल में एक मनमाना क्षेत्र है। आप इसे आसानी से प्राप्त करने के लिए DateField के auto_now_add पैरामीटर को True पर सेट कर सकते हैं।
बेनबब 96


1

दो तरीके

.filter(created_at__range=[from_date, to_date])

एक और तरीका

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte का अर्थ है बराबर से बड़ा
  • lte का मतलब बराबर से कम होता है

Q ऑब्जेक्ट दूसरी विधि में अनावश्यक है, आप लिख सकते हैं:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

यदि आप एक का उपयोग कर रहे हैं DateTimeField, तो तारीखों के साथ फ़िल्टर करने में अंतिम दिन आइटम शामिल नहीं होंगे।

आपको दिनांक के रूप में मूल्य डालना होगा:

...filter(created_at__date__range=(start_date, end_date))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.