2015-06-26 14 views
5

मुझे 2 प्रश्न हैं, लेकिन वे एक ही विषय से संबंधित हैं।Django डेटाबेस से नवीनतम प्रविष्टि प्राप्त करें

मैं जानता हूँ कि टेम्पलेट टैग

{% for status in status %} 

    <tr> 
     <td>{{ status.status}}</td> 
    </tr> 

{% endfor %} 

हालांकि का उपयोग कर एक for loop से डेटा पुनः प्राप्त करने के लिए कैसे जब मैं जब मैं का उपयोग एक वस्तु मैं भी कोई त्रुटि मिलती प्राप्त करना चाहते हैं:

po = Status.objects.latest('id') 

और निकालें लूप के लिए।

मैं:

'Status' object is not iterable 

मेरे प्रश्न हैं:

  1. मैं किसी दिए गए मॉडल के लिए डेटाबेस से नवीनतम प्रविष्टि कैसे मिल सकता है?
  2. मैं अपने टेम्पलेट टैग को केवल एक रिकॉर्ड के लिए अनुमति देने के लिए कैसे सेट कर सकता हूं?
+0

यदि संदर्भ डेटा में 'पीओ' - 'आईडी' द्वारा क्रमबद्ध {{po}} – madzohan

उत्तर

10

आप यहाँ दो अलग प्रश्न हैं:

  1. मैं डेटाबेस से नवीनतम वस्तु कैसे पुनः प्राप्त करते हैं।

आप latest() क्वेरीसेट ऑपरेटर का उपयोग करके ऐसा कर सकते हैं। दस्तावेज़ों को पढ़कर आप ध्यान देंगे कि यह ऑपरेटर दिनांक फ़ील्ड पर काम करता है, पूर्णांक नहीं।

Status.objects.latest('date_added') # or date_updated 

यदि आप आईडी से ऐसा करना चाहते हैं तो आपको आईडी द्वारा ऑर्डर करने और पहले परिणाम का चयन करने की आवश्यकता होगी। (यह केवल तभी काम करेगा जब आप प्राथमिक कुंजी बढ़ाने में उपयोग कर रहे हैं, यह यूयूआईडी या यादृच्छिक रूप से जेनरेट किए गए हैंश के साथ काम नहीं करेगा)।

Status.objects.order_by('id')[0] 

साइड नोट: मैं व्यक्तिगत रूप से date_added/date_updated ऐसा करने का तरीका उपयोग करता हूं।

    एक वस्तु

एक एकल वस्तु पर दोहराया नहीं किया जा सकता से अधिक

  • पुनरावृत्ति। इसके लिए आपको एक अलग टेम्पलेट का उपयोग करने की आवश्यकता होगी। या, आपको एक वस्तु को एक सूची में जोड़ना होगा।

    # note the [] around the query 
    result = [Status.object.latest('date_added')] 
    

    व्यक्तिगत रूप से मेरे पास सिंगल/एकाधिक परिणाम सूचीबद्ध करने के लिए अलग-अलग विचार हैं। मेरे पास कई ऑब्जेक्ट्स के लिए ListView और एकल ऑब्जेक्ट्स के लिए DetailView है।

  • +0

    इसके लिए धन्यवाद, इसे बहुत स्पष्ट बना दिया। – Jimmyn

    1

    ऐसा इसलिए है क्योंकि latest एक क्वेरीसेट (जो पुनरावर्तनीय है) की बजाय एक उदाहरण देता है। तो:

    1) नवीनतम काम नहीं कर रहा है क्योंकि यह तिथि फ़ील्ड के साथ काम करता है। और पढ़ें: https://docs.djangoproject.com/en/1.8/ref/models/querysets/#latest। 'आईडी' latest फ़िल्टर के साथ उपयोग करने के लिए एक मान्य फ़ील्ड नहीं है।

    2) आप एक उदाहरण के साथ for टेम्पलेट टैग का उपयोग नहीं कर सकते क्योंकि यह पुन: प्रयोज्य नहीं है।

    अपनी स्थिति को हल करने के लिए, मैं मॉडल की Meta कक्षा में ordering = ('id',) क्षेत्र निर्दिष्ट और फिर कर एक po = Status.objects.all()[:1] ताकि आप इसे में एक भी वस्तु के साथ (जो iterable है) एक क्वेरीसमूह प्राप्त करेंगे होगा। फिर आप अपने po चर के साथ for टेम्पलेट टैग का उपयोग करने में सक्षम होंगे।

    उम्मीद है कि यह मदद करता है।

    +0

    का उपयोग गलत तरीका है - इसे जोड़ा जाना चाहिए | परिवर्तित तिथि – madzohan

    +0

    हाँ, मुझे पता है कि यह गलत है। लेकिन ओपी के पास अपने प्रश्न में 'Status.objects.latest ('id') है, इसलिए मैंने अभी भी वही फ़ील्ड लिखा है। उत्तर को जो भी फ़ील्ड चाहिए उसे निकाला जा सकता है। – argaen

    +0

    संदर्भ – Jimmyn

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