2012-03-23 14 views
10

मेरे पास ऑब्जेक्ट्स के लिए आईडी की एक सूची है जिसे मुझे पकड़ने की आवश्यकता है, तो मुझे उन्हें अपने टाइमस्टैम्प द्वारा सॉर्ट करना होगा। यहाँ कैसे मैं यह करने के लिए जा रहा था है:Django: आईडी सूची से ऑब्जेक्ट्स का एक सेट प्राप्त करें (और टाइमस्टैम्प द्वारा सॉर्ट करें)

For i in object_ids: 
    instance = Model.objects.get(id = i) 
    # Append instance to list of instances 

#sort the instances list 

लेकिन वहाँ दो चीजें हैं जो मुझे परेशान कर रहे हैं:

  • वहाँ उनकी आईडी की सूची द्वारा प्रविष्टियों का संग्रह हड़पने के लिए कोई रास्ता नहीं है - बिना फंदे के लिए?
  • क्या मैं अपनी आईडी के आधार पर क्वेरीसेट पर मनमाने ढंग से ऑब्जेक्ट्स जोड़ सकता हूं?

धन्यवाद,

उत्तर

18

यह इस तरह के एक कोड का उपयोग किया जा सकता है:

objects = Model.objects.filter(id__in=object_ids).order_by('-timestamp') 

order_by सकारात्मक या नकारात्मक timestamp निर्भर करता है आप कैसे चाहते हैं कि उसे हल कर हो सकता है।

+4

ऑब्जेक्ट_आईड्स सूची के समान ऑब्जेक्ट्स को उसी क्रम में वापस लाने का सबसे अच्छा तरीका क्या है? ओपीएस कोड? – Chris

+2

मैं शायद डाटाबेस से डेटा केवल एक कॉल (जैसे ऊपर) के साथ लाऊंगा और फिर अपने कोड में सॉर्टिंग कर दूंगा। डाटाबेस एन बार पूछताछ के बाद तेजी से होना चाहिए। विशेष रूप से एक बड़े एन – kender

+0

@kender @Chris के साथ क्या हमारे पास लाने के बाद सॉर्ट करने के बजाय 'ऑब्जेक्ट_ड्स सूची' के समान क्रम में 'कोई समाधान है? – Dipak

8

निम्नलिखित का प्रयास करें:

result = Model.objects.filter(id__in=object_ids) 

यह सब Model वस्तुओं है कि रिटर्न उनके object_ids की दी गई सूची में id। इस तरह, आपको परिणामी क्वेरीज़ेट में अतिरिक्त मॉडल जोड़ने की भी आवश्यकता नहीं है।

संबंधित मुद्दे