Django

2012-03-15 7 views
5

में फ्लाई पर एक QuerySet ऑब्जेक्ट बदलना क्या मैं इसे किसी दृश्य में कर सकता हूं या नहीं?Django

a = SomeTable.objects.all() 
for r in a: 
    if r.some_column == 'foo': 
     r.some_column = 'bar' 

यह एक विजेता की तरह काम किया, लेकिन मैं कहीं और एक ऐसी ही बात करने की कोशिश की और मैं अजीब परिणाम हो रही थी, जिसका अर्थ है कि क्वेरीसमूह वस्तुओं के साथ trifled होने के लिए पसंद नहीं है। और, मैंने इस तरह की चाल के लिए अच्छे या बुरे दस्तावेज़ों में कुछ भी नहीं देखा।

मुझे पता है कि ऐसा करने के अन्य तरीके हैं, लेकिन मैं विशेष रूप से जानना चाहता हूं कि यह एक बुरा विचार है, यह बुरा क्यों है, और यदि यह वास्तव में बुरा है, तो सबसे अच्छा 'सबसे अच्छा' सबसे अच्छा डेजैगो/पायथनिक तरीका क्या है फ्लाई पर मूल्यों को बदलने के लिए होगा।

उत्तर

6

यह जब तक आप बाद में कुछ भी नहीं करते के रूप में क्वेरीसमूह फिर से मूल्यांकन किया जाना का कारण होगा कि ठीक है। यह डेटाबेस को एक और क्वेरी करेगा, और आपकी सभी संशोधित वस्तुओं को ताजा लोगों के साथ बदल दिया जाएगा।

अपनी सुरक्षा करने की उस के खिलाफ एक सूची में बदलने के लिए पहले किया जाएगा एक तरीका है:

a = list(SomeTable.objects.all()) 

इस तरह, आगे टुकड़ा करने की क्रिया आदि एक ताजा db कॉल का कारण नहीं होगा, और किसी भी संशोधन संरक्षित किया जाएगा।

+0

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

0

यूप। डॉक्स here

SomeTable.objects.filter(some_column='foo').update(some_column='bar') 

मैं Django के मुहावरे के साथ जाना होगा देखें। यह एसक्यूएल को एक ही कथन के साथ 'कहां' और 'अपडेट' के साथ निष्पादित करता है बल्कि आपके कोड जैसे कई SQL कथन भेजता है। यह समय बचाता है। SQL समय का परीक्षण करने के लिए Django के 'connection' के साथ जांचें। उदाहरण के लिए, यह टुकड़ा करने की क्रिया -

+4

धन्यवाद, और मैं माफी माँगता हूँ अगर मैं स्पष्ट नहीं था, लेकिन मैं डेटाबेस अद्यतन, बस प्रदर्शन प्रयोजनों के लिए उत्पादन को संशोधित करने में कोई दिलचस्पी नहीं है। – proffrink