2011-06-30 17 views
6

क्या प्रत्येक create विधि के बाद सहेजने की विधि को कॉल किया जाना चाहिए या create विधि को कॉल करने से स्वचालित रूप से save विधि पर कॉल किया जाता है?Django में सहेजने की विधि कब बुलाई जानी चाहिए?

यदि कोई ऑब्जेक्ट बनाने के बाद save विधि स्वचालित रूप से कॉल की जाती है तो save विधि के लिए एक अच्छा उपयोग-केस क्या होगा?

धन्यवाद।

उत्तर

8

create() के बाद कॉल करने की आवश्यकता नहीं है।

के लिए docs से

बनाएँ:

एक वस्तु बनाने और यह सब एक कदम

में बचत इसकी तो एक वस्तु सामान्य तरीके से बनाने के स्थान पर इस्तेमाल किया जा करने के लिए एक सुविधा विधि object.save()

2

जब आप एक वस्तु है कि आप create से किसी अन्य माध्यम से मिल गया संशोधित save विधि का इस्तेमाल किया जाना चाहिए, इस तरह के रूप में .objects.get साथ बचत । अन्यथा, आपके संशोधन खो गए हैं।

1

यहां एक नमूना स्निपेट है जो सहेजने के तरीके के लिए एक अच्छा उपयोग दिखाता है। यह मूल रूप से सबमिट किए गए फॉर्म से डेटा ले रहा है और फिर "दृश्यों के पीछे" अतिरिक्त जानकारी जोड़ रहा है।

#Model 
class Foo(models.Model): 
    field_one = models.CharField(max_length=10) 
    field_two = models.CharField(max_length=10) 
    field_three = models.CharField(max_length=10) 

#Form 
class FooForm(ModelForm): 
    class Meta: 
     model = Foo 
     exclude = ('field_three') #form will just show field_one and field_two 

#View 
def FooView(request): 
    if request.method == 'POST' 
     form = FooForm(request.POST) #gets field_one and two from form data 
     if form.is_valid(): 
      new_foo = form.save(commit = False) #doesn't actually save yet 
      new_foo.field_three = 'Foobar!' #add data to field_three 
      new_foo.save() #now it saves all 3 fields 
    else: 
     form = FooForm() 
    return #add some sort of http response here 

यहाँ बचाने (पर कुछ अधिक जानकारी के साथ Django Docs है) और प्रतिबद्ध = झूठी

एक aside- के रूप में मैं सिर्फ महसूस किया कि तुम मेरे उदाहरण की तरह एक मॉडल के लिए एक स्थिर स्ट्रिंग जोड़ रहे हैं, तो पता चलता है, तो आप यह गलत कर रहा है। लेकिन विचार है हाहा।

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