2013-05-09 5 views
7

में ऑब्जेक्ट्स को हटाते समय एक Django QuerySet पर इटरेट करना मुझे आश्चर्य है कि क्वार्सेट में ऑब्जेक्ट्स को हटाते समय Django QuerySet पर फिर से शुरू करने का सबसे अच्छा तरीका क्या है? उदाहरण के लिए, कहें कि आपके पास विशिष्ट समय पर प्रविष्टियों के साथ एक लॉग टेबल है, और आप उन्हें संग्रहित करना चाहते हैं ताकि प्रत्येक 5 मिनट में 1 से अधिक प्रविष्टियां न हों। मैं इस गलत हो सकता है पता है, लेकिन यह है कि मैं क्या करने के लिए जा रहा हूँ की तरह है:एक ही प्रश्नोत्तरी

toarchive = Log.objects.all().order_by("-date") 
start = toarchive[0].date 
interval = start - datetime.timedelta(minutes=5) 
for entry in toarchive[1:]:   
    if entry.date > interval: 
     entry.delete() 
    else: 
     interval = entry.date - datetime.timedelta(minutes=5) 
+3

यह मान्य है, आप इस तरह से वस्तुओं को हटा सकते हैं। – Rohan

+0

इस तरह की क्वेरीसेट पर लूपिंग करते समय हटाएं() का उपयोग करके, जब मैं मॉडल के व्यवस्थापक पृष्ठ पर जाता हूं तो रिक्त रिकॉर्ड्स रखें। ऐसा लगता है कि वस्तु पूरी तरह से हटा नहीं है। क्या गलत है? –

उत्तर

0

क्वेरीसमूहों एक delete विधि है कि कि क्वेरीसमूह के सभी परिणामों को हटाने के होगा। उदाहरण के लिए आपने

toarchive.filter(date__gt=interval).delete() 

काम करेगा। यदि आप एक परीक्षण कर रहे हैं जो फ़िल्टर में नहीं किया जा सकता है, हालांकि, आपके द्वारा वर्णित विधि शायद सबसे अच्छी है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद! मुझे पता है कि यह विधि भी संभव है। हालांकि इस मामले में मुझे नहीं लगता कि यह काम करेगा, क्योंकि डिलीवरी की स्थिति QuerySet में प्रविष्टियों के बीच सापेक्ष है। मुझे लगता है कि मैं और अधिक जानना चाहता हूं, क्या मैं क्वेरी में भाग लेता हूं, अगर मैं क्वेरीज़ेट से वस्तुओं को हटा रहा हूं, जबकि मैं इसके माध्यम से पुन: प्रयास करता हूं। – user1630866

+0

आप सही हैं, मैं वहां 'अन्य' खंड पर ध्यान नहीं दे रहा था। मैंने इसका परीक्षण नहीं किया है, लेकिन क्वेरीज़ेट में ऑब्जेक्ट्स को हटाना सुरक्षित होना चाहिए, क्योंकि 'हटाएं' केवल SQL डिलीट क्वेरी को इंगित करता है, यह स्मृति में मॉडल ऑब्जेक्ट को प्रभावित नहीं करता है। – Will

+0

यह डेटाबेस प्रविष्टि को नष्ट कर देगा? या बस इसे क्वेरीसेट से हटा दें? – jeff

3

तो मुझे लगता है कि मैंने यह पूछकर अपने स्वयं के प्रश्न का उत्तर दिया है, अगर कोई और उत्सुक है। मैंने सोचा था कि वस्तुओं को हटाने के दौरान उन्हें हटाते समय कोई समस्या होगी, लेकिन ऐसा नहीं है। प्रश्न में कोड स्निपेट ऐसा करने का सही तरीका है।

+1

फ़िल्टर ऑपरेशन करने के बाद ऑब्जेक्ट को हटाने के बजाय मैं क्वेरी सेट से तत्व को कैसे हटा सकता हूं? –

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