request.POST
का उपयोग कर किसी फ़ॉर्मेट से ऑब्जेक्ट को मैं कैसे अपडेट कर सकता हूं?Django फॉर्मेट - ऑब्जेक्ट को कैसे अपडेट करें?
यहां मेरा कोड है और मेरी समस्या यह है कि यह हमेशा एक नया PhoneNumber
ऑब्जेक्ट बनाता है। लेकिन मैं पुराने PhoneNumber
ऑब्जेक्ट को अपडेट करना चाहता हूं।
def contact_detail(request, contact_id):
contact = get_object_or_404(Contact, pk=contact_id)
phone_number_list = PhoneNumber.objects.filter(contact=contact_id)
if request.method == 'POST':
cform = ContactForm(request.POST, instance=contact)
#the next line is probably wrong!
phonenumberformset = PhoneNumberFormSet(request.POST, queryset=phone_number_list)
if cform.is_valid() and phonenumberformset.is_valid():
phonenumber_instances = phonenumberformset.save(commit=False)
for phonenumber in phonenumber_instances:
phonenumber.contact = contact
phonenumber.save()
request.user.message_set.create(message='The contact "%s" was chanced successfully.' % contact.__str__())
return HttpResponseRedirect("/crm/contacts/?oby=1")
else:
cform = ContactForm(instance=contact)
phonenumberformset = PhoneNumberFormSet(queryset=phone_number_list)
return render_to_response(
'crm/contact_detail.html',
{'cform': cform, 'phonenumberformset': phonenumberformset,},
context_instance = RequestContext(request),
)
संपादित करें:
PhoneNumberFormSet = modelformset_factory(PhoneNumber, max_num=3, extra=3, exclude=('contact',))
संपादित करें:: समाधान inlineformset_factory का उपयोग कर: मैं तीन PhoneNumberForms बनाने
@login_required
def contact_detail(request, contact_id):
contact = get_object_or_404(Contact, pk=contact_id)
PhoneNumberInlineFormSet = inlineformset_factory(Contact, PhoneNumber, max_num=3)
if request.method == 'POST':
cform = ContactForm(request.POST, instance=contact)
classificationformset = ClassificationInlineFormSet(request.POST, request.FILES, instance=contact)
addressformset = AddressInlineFormSet(request.POST, request.FILES, instance=contact)
phonenumberformset = PhoneNumberInlineFormSet(request.POST, request.FILES, instance=contact)
if cform.is_valid() and phonenumberformset.is_valid():
contact = cform.save()
phonenumberformset.save()
request.user.message_set.create(message='The contact "%s" was chanced successfully.' % contact.__str__())
return HttpResponseRedirect("/crm/contacts/?oby=1")
else:
cform = ContactForm(instance=contact)
phonenumberformset = PhoneNumberInlineFormSet(instance=contact)
return render_to_response(
'crm/contact_detail.html',
{'cform': cform, 'phonenumberformset': phonenumberformset,},
context_instance = RequestContext(request),)
यह दृष्टिकोण भी एक इनलाइन फार्म के लिए एक हटाने चेकबॉक्स कहते हैं। आसान और महान।
आज बहुत कुछ सीख Thanks..I :) मैं एक त्रुटि इस दृष्टिकोण के साथ भी मिलता है:/सीआरएम/संपर्क/15/ पर IndexError - सीमा से बाहर सूची सूचकांक .. उम्मीद है कि मैं inlineformset_factory –
ठीक है के साथ इसे से छुटकारा पाने के काम करने लगता है। मैंने अभी फोन नंबर ऑब्जेक्ट्स के लिए कोशिश की है। और वाह .. मुझे प्रत्येक इनलाइन ऑब्जेक्ट के लिए वास्तव में एक अच्छा डिलीट चेकबॉक्स मिला .. wuhaa :) लेकिन एक प्रश्न: क्या इनलाइन ऑब्जेक्ट्स के max_num को परिभाषित करने का कोई तरीका है? चूंकि यह हमेशा तीन और इनलाइन जोड़ता है। –
आह ठीक है, "सामान्य" रूपों के समान समाधान। max_num = 3 या अतिरिक्त = 0 –