जवाबों:
क्वेरी ऑब्जेक्ट ऑब्जेक्ट updateविधि का उपयोग करें :
MyModel.objects.filter(pk=some_value).update(field1='some value')
updateबड़े पैमाने पर अपडेट के लिए यह विधि बहुत बढ़िया है, लेकिन इसका उपयोग आपके सिर में एक चेतावनी सेट करने के लिए किया जाना चाहिए, जब आप इसका उपयोग करते हैं, तो आपको उस ऑब्जेक्ट से जुड़े किसी भी सिग्नल की समीक्षा करने की आवश्यकता होती है, जिसे मैन्युअल रूप से निकाल दिया जाना चाहिए
MyModel.objects.filter(pk=some_value).update(field1=self.data)
Django डेटाबेस ऑब्जेक्ट्स ऑब्जेक्ट बनाने और बदलने के लिए समान सहेजें () विधि का उपयोग करते हैं।
obj = Product.objects.get(pk=pk)
obj.name = "some_new_value"
obj.save()
Django को UPDATE बनाम INSERT के बारे में कैसे पता चलता है।
यदि ऑब्जेक्ट की प्राथमिक कुंजी विशेषता एक मान पर सेट है जो True (यानी, कोई भी या खाली स्ट्रिंग के अलावा कोई मूल्य) का मूल्यांकन करता है, तो Django एक UPDATE को निष्पादित करता है। यदि ऑब्जेक्ट की प्राथमिक कुंजी विशेषता सेट नहीं है या यदि UPDATE ने कुछ भी अपडेट नहीं किया है, तो Django एक INSERT निष्पादित करता है।
रेफरी: https://docs.djangoproject.com/en/1.9/ref/models/instances/
यह उत्तर उपरोक्त दो दृष्टिकोणों की तुलना करता है। यदि आप एक ही पंक्ति में कई वस्तुओं को अद्यतन करना चाहते हैं, तो इसके लिए जाएं:
# Approach 1
MyModel.objects.filter(field1='Computer').update(field2='cool')
अन्यथा आपको क्वेरी सेट पर अलग करना होगा और व्यक्तिगत वस्तुओं को अपडेट करना होगा:
#Approach 2
objects = MyModel.objects.filter(field1='Computer')
for obj in objects:
obj.field2 = 'cool'
obj.save()
दृष्टिकोण 1 अधिक तेज़ है क्योंकि, यह दृष्टिकोण 2 की तुलना में केवल एक डेटाबेस क्वेरी बनाता है, जो 'n + 1' डेटाबेस क्वेरी बनाता है। (क्वेरी सेट में n आइटम के लिए)
मुट्ठी दृष्टिकोण एक डीबी क्वेरी यानी UPDATE करता है, दूसरा एक दो बनाता है: SELECT और फिर UPDATE।
ट्रेडऑफ़ वह है, मान लीजिए कि आपके पास कोई ट्रिगर्स है, जैसे कि अद्यतन updated_onया इस तरह के किसी भी संबंधित फ़ील्ड में, यह सीधे अपडेट यानी दृष्टिकोण 1 पर ट्रिगर नहीं होगा।
दृष्टिकोण 1 का उपयोग क्वेरी पर किया जाता है, इसलिए एक साथ कई वस्तुओं को अपडेट करना संभव है, दृष्टिकोण 2 के मामले में नहीं।
केवल serializerचीजों में एक मामले में , आप बहुत ही सरल तरीके से अपडेट कर सकते हैं!
my_model_serializer = MyModelSerializer(
instance=my_model, data=validated_data)
if my_model_serializer.is_valid():
my_model_serializer.save()
केवल formबातों में एक मामले में !
instance = get_object_or_404(MyModel, id=id)
form = MyForm(request.POST or None, instance=instance)
if form.is_valid():
form.save()
Django formDjango उचित से है।
updateइस तरह से विधि का उपयोग करते हैं तो उस मॉडल या अन्य "कोड सामान" से जुड़े कोई भी संकेत वस्तुओं के खिलाफ नहीं चलेंगे। जले हुए व्यक्ति से बस एक सूचक :)