Django में फ़िल्टर के साथ नवीनतम रिकॉर्ड प्राप्त करें


90

मैं नवीनतम Django मॉडल ऑब्जेक्ट प्राप्त करने का प्रयास कर रहा हूं, लेकिन सफल नहीं हो सकता।

इनमें से कोई भी काम नहीं कर रहा है:

obj = Model.objects.filter(testfield=12).latest()
obj = Model.objects.latest().filter(testfield=12)

3
क्या आपने कोशिश की है:obj= Model.objects.filter(testfield=12).order_by('-id')[:1]
कैथरीन

@ कैथरीन, एक आकर्षण की तरह काम कर! : डी। आप इसे उत्तर के रूप में लिखना चाहते हैं, इसलिए मैं इसकी जांच कर सकता हूं?
Doniyor

2018 में NewsPostImage.objects.filter(newsPostTarget=img_id).first()। आशा करता हूँ की ये काम करेगा।
नगाटिया फ्रैंकलाइन

जवाबों:


101
obj= Model.objects.filter(testfield=12).order_by('-id')[0]

10
@DaveMerwin यह गलत नहीं है; इस समस्या को हल करने के कई तरीके हैं, और यह उत्तर और अन्य दोनों सही हैं।
जॉर्डन

1
ध्यान दें कि यह अनुमान लगाता है कि आईडी एक अनुक्रमित प्राथमिक कुंजी पूर्णांक है। जो आमतौर पर django के लिए डिफ़ॉल्ट है, लेकिन कभी-कभी नहीं।
११:

2
यह खतरनाक हो सकता है क्योंकि फ़िल्टर एक खाली सूची लौटा सकता है
किंग्सटन चान

'-id' का प्रयोग ऑर्डर को उलटने के लिए किया जाता है!
इंद्र

3
शायद .first () के बजाय [0]?
फ़ेवजेनिक

119

डॉक्सो से डॉक्स देखें: https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest

आपको नवीनतम () में फ़ील्ड निर्दिष्ट करने की आवश्यकता है। जैसे।

obj= Model.objects.filter(testfield=12).latest('testfield')

या यदि आपके मॉडल का मेटा get_latest_by को निर्दिष्ट करता है, तो आप field_nameतर्क को छोड़ सकते हैं earliest() or latest()। Django get_latest_byडिफ़ॉल्ट रूप से निर्दिष्ट फ़ील्ड का उपयोग करेगा ।


2
क्या "टेस्टफील्ड" को एक तारीख क्षेत्र होना चाहिए?
तानी-रोक्क


17

latestवास्तव में दिनांक फ़ील्ड के साथ काम करने के लिए डिज़ाइन किया गया है (यह संभवतः अन्य कुल-ऑर्डर किए गए प्रकारों के साथ भी काम करता है, लेकिन निश्चित नहीं)। और क्षेत्र का नाम निर्दिष्ट किए बिना आप इसका उपयोग कर सकते हैं एकमात्र तरीका get_latest_byमेटा विशेषता सेट करके है, जैसा कि यहां बताया गया है


8
यह प्राथमिक कुंजी के साथ काम करता है, आप हमेशा कुछ इस तरह से कर सकते हैं:Model.objects.latest('id')
एंडर

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