मेरे पास एक वेब पेज है जहां उपयोगकर्ता गतिशील रूप से django प्रारूपों में रूपों को जोड़ और हटा सकते हैं।मॉडल फॉर्मेट से गतिशील रूप से हटाएं django
मैंने Dynamically adding a form to a Django formset with Ajax पढ़ा है, जिसके आधार पर मैं फॉर्मेट को गतिशील रूप से फॉर्म जोड़ सकता हूं। अब मैं गतिशील रूप से फॉर्मेट को हटाना चाहता हूं। मैंने Dynamically Delete inline formsets in Django
जिस तरह से मैं इसे करना चाहता हूं वह तब होता है जब उपयोगकर्ता डिलीट पर क्लिक करता है, मेरे पास एक AJAX फ़ंक्शन है जो डेटाबेस से फॉर्म इंस्टेंस रिकॉर्ड हटा देता है। जब मेरा AJAX फ़ंक्शन देता है तो मैं वही कुल_form_count और प्रारंभिक_form_count रखता हूं और केवल HTML HTML को छुपाता हूं ताकि हटाए गए रिकॉर्ड को भी मेरे पोस्ट में सबमिट किया जा सके।
प्रारंभ में formset के रूप में अपनी फार्म तत्वों renders:
#form0
<input id="id_formprefix-0-id" type ="hidden "value="something" name="formprefix-0-id">
<input id="id_formprefix-0-field" value="something" type="text" name="formprefix-0-field">
#form1
<input id="id_formprefix-1-id" type ="hidden "value="something" name="formprefix-1-id">
<input id="id_formprefix-1-field" value="something" type="text" name="formprefix-1-field">
#form2
<input id="id_formprefix-2-id" type ="hidden "value="something" name="formprefix-2-id">
<input id="id_formprefix-2-field" value="something" type="text" name="formprefix-2-field">
अब मैं गतिशील, प्रपत्र 0 हटाना ajax का उपयोग कर, के बाद मेरे रिकॉर्ड नष्ट कर रहा है, मैं रूप में गिना जाता है में परिवर्तन नहीं करते लगता है, तो total_form_count और initial_form_count 3.
(यदि मैं इस मामले में कुल_form_count और प्रारंभिक_form_count को 2 से कम करता हूं, जब मैं POST डेटा का उपयोग करके अपने दृश्य में फॉर्मेट को पॉप्युलेट करता हूं, तो इसे फॉर्म 0 और फॉर्म 1 के रूप में आदेश दिया जाने की उम्मीद है। लेकिन मेरे मामले में मान्य रूप फॉर्म 1 और फॉर्म 2 हैं)
अब मेरे विचार में, मैं अपना फॉर्म सहेजने के लिए निम्न की तरह कुछ करता हूं।
myformset = modelformset_factory(ObjectElement,form=Object_Form, extra=0, can_delete=True)
for form in myformset.forms:
print(form.instance.id) #this does not print id of deleted record, but of the first existing record in the database.
print(form.instance.attribute)# this prints the correct element, which was submitted by POST even for a deleted record.
try:
objectInstance = ObjectElement.objects.get(id = form.instance.id)
objectInstance.save()
except ObjectElement.DoesNotExist:
print("Do not save as the record has already been deleted")
जब मैं किसी भी रिकॉर्ड को हटाने के बिना मेरे formset को बचाने की बचत ठीक काम करता है और सही form.instance.id
छपा है। हालांकि अगर मैं AJAX का उपयोग करके एक फॉर्म उदाहरण हटा देता हूं, और फिर हटाए गए रिकॉर्ड के लिए print(form.instance.id)
डेटाबेस को सहेजने का प्रयास करता है, तो डेटाबेस में पहली उपलब्ध आईडी मुद्रित करना प्रतीत होता है, लेकिन पोस्ट द्वारा सबमिट की गई आईडी नहीं। (जैसा कि रिकॉर्ड हटा दिया गया है, आईडी डेटाबेस में मौजूद नहीं है, लेकिन क्या इसे पोस्ट सही के माध्यम से सबमिट किया जाना चाहिए?)
यदि मैं इसे कोशिश/पकड़ लूप के बिना करता हूं तो मुझे निम्न त्रुटि मिलती है form.errors:
<ul class="errorlist"><li>id<ul class="errorlist"><li>Select a valid choice. That choice is not one of the available choices.</li></ul></li></ul>
जो संकेत मिलता है कि इसे स्वीकार सही रूप आईडी फार्म नष्ट कर दिया रिकार्ड के लिए प्रस्तुत पोस्ट नहीं कर रहा है लगता है।
किसी भी शरीर को यह पता नहीं है कि मैं यहां क्या खो रहा हूं? या ऐसा करने का एक बेहतर तरीका है।
कैसे के बारे में हम गतिशील, formsets से रूपों को हटाने जाने के रूप में ऐसा लगता है कि रूपों के आदेश अनुक्रमिक होना चाहिए ..
धन्यवाद अग्रिम में !! किसी भी मदद की सराहना की है।
आप प्रत्येक फ़ॉर्म को हटाने के लिए बिल्कुल कैसे चिह्नित करते हैं? – amchugh89
@ amchugh89 ठीक है तो मुझे विश्वास है कि मैंने देखा [यह] (https://docs.djangoproject.com/en/1.4/topics/forms/formsets/#can-delete)। लेकिन [नए संस्करण] (https://docs.djangoproject.com/en/1.7/topics/forms/formsets/#understanding-the-managementform) निर्दिष्ट करते हैं कि आप पोस्ट में 'फॉर्म - # - DELETE' सहित हटाए जाने के लिए चिह्नित कर सकते हैं डेटा। – akotian