2010-04-26 36 views
58

मैं दो क्वेरी करने के बजाय, एक ऑब्जेक्ट का चयन करने के लिए एक ऑब्जेक्ट और एक ऑब्जेक्ट को अपडेट करने के बजाय एक ही क्वेरीसेट पर अद्यतन कैसे चुनूं और स्टेटमेंट का चयन कैसे करूं?Django अद्यतन ऑब्जेक्ट

एसक्यूएल में बराबर होगा कुछ की तरह:

MyModel.objects.filter(pk=some_value).update(field1='some value') 

उत्तर

105

का प्रयोग करें।

obj = Product.objects.get(pk=pk) 
obj.name = "some_new_value" 
obj.save() 

कैसे Django बनाम सम्मिलित
अद्यतन करने के लिए जानता है वस्तु के प्राथमिक प्रमुख विशेषता एक मूल्य है कि यह सच है का मूल्यांकन करने के लिए सेट है, तो (यानी, एक मूल्य के के अलावा अन्य कोई नहीं या रिक्त स्ट्रिंग) , Django एक अद्यतन निष्पादित करता है। यदि ऑब्जेक्ट की प्राथमिक कुंजी विशेषता सेट नहीं है या यदि UPDATE कुछ भी अपडेट नहीं किया गया है, तो Django एक INSERT निष्पादित करता है।

रेफरी .: https://docs.djangoproject.com/en/1.9/ref/models/instances/

+38

बस एक निष्पक्ष चेतावनी ... यदि आप तो किसी भी है कि मॉडल या अन्य "कोड सामान" से जुड़ी संकेत इस तरह 'update' विधि का उपयोग की वस्तुओं के खिलाफ नहीं चलेगा । जला दिया गया किसी से सिर्फ एक सूचक :) –

+0

@DMactheDestroyer दोस्त उस मूल्यवान जानकारी के लिए धन्यवाद। तो क्या हमें इसे अद्यतन करने के पुराने तरीके का उपयोग करना चाहिए? (यानी) मिलता है और बचाओ? –

+0

@ अच्छी तरह से दोस्ताना, यह सब आपके परिदृश्य पर निर्भर करता है। 'अद्यतन' विधि बड़े पैमाने पर अपडेट के लिए बहुत अच्छी है, लेकिन जब आप इसका उपयोग करते हैं तो इसे अपने सिर में एक चेतावनी सेट करनी चाहिए कि आपको उस ऑब्जेक्ट से जुड़े किसी भी सिग्नल की समीक्षा करने की आवश्यकता है जिसे मैन्युअल रूप से निकाल दिया जा सकता है –

27

Django डेटाबेस ऑब्जेक्ट्स बनाने और वस्तुओं को बदलने के लिए एक ही विधि को बचाने() का उपयोग करें: क्वेरीसमूह object update method

update my_table set field_1 = 'some value' where pk_field = some_value 
संबंधित मुद्दे