गतिशील रूप से अजाक्स के साथ एक Django फॉर्मेट में एक फॉर्म जोड़ना


260

मैं स्वचालित रूप से अजाक्स का उपयोग करके एक Django फॉर्मेट में नए रूपों को जोड़ना चाहता हूं, ताकि जब उपयोगकर्ता "ऐड" बटन पर क्लिक करे तो यह जावास्क्रिप्ट चलाता है जो पेज पर एक नया फॉर्म (जो कि फॉरमेट का हिस्सा है) जोड़ता है।


मैं यहाँ केवल आपके उपयोग के मामले में अनुमान लगा रहा हूँ, क्या यह gmail में "अटैच अदर फाइल" फीचर की तरह है, जहाँ उपयोगकर्ता को फाइल अपलोड फील्ड के साथ प्रस्तुत किया जाता है और उपयोगकर्ता के क्लिक के रूप में नए फील्ड डोम पर जोड़े जाते हैं। "एक और फ़ाइल संलग्न करें" प्लस बटन?
प्रियारिडोगग

यह कुछ ऐसा है जिस पर मैं जल्द ही काम करने जा रहा हूं, इसलिए मुझे किसी भी उत्तर में दिलचस्पी होगी।
वैन आंधी

2
यह सवाल थोड़ा फजी है, यह शीर्षक, विवरण और टैग में "अजाक्स" का उल्लेख करता है। हालाँकि, उत्तर में से कोई भी अजाक्स का उपयोग नहीं करता है, फिर भी इसे सबमिट करने के लिए फॉर्म की आवश्यकता होती है।
एंटोनी पिंसर्ड

जवाबों:


219

यह है कि मैं इसे कैसे करता हूं, jQuery का उपयोग करके :

मेरा टेम्प्लेट:

<h3>My Services</h3>
{{ serviceFormset.management_form }}
{% for form in serviceFormset.forms %}
    <div class='table'>
    <table class='no_error'>
        {{ form.as_table }}
    </table>
    </div>
{% endfor %}
<input type="button" value="Add More" id="add_more">
<script>
    $('#add_more').click(function() {
        cloneMore('div.table:last', 'service');
    });
</script>

एक जावास्क्रिप्ट फ़ाइल में:

function cloneMore(selector, type) {
    var newElement = $(selector).clone(true);
    var total = $('#id_' + type + '-TOTAL_FORMS').val();
    newElement.find(':input').each(function() {
        var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-');
        var id = 'id_' + name;
        $(this).attr({'name': name, 'id': id}).val('').removeAttr('checked');
    });
    newElement.find('label').each(function() {
        var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-');
        $(this).attr('for', newFor);
    });
    total++;
    $('#id_' + type + '-TOTAL_FORMS').val(total);
    $(selector).after(newElement);
}

यह क्या करता है:

cloneMoreselectorपहले तर्क के रूप में, और typeदूसरे के रूप में फॉर्मेट को स्वीकार करता है । क्या करना selectorचाहिए इसे पास करें जो इसे डुप्लिकेट करना चाहिए। इस मामले में, मैं इसे पास करता हूं div.table:lastताकि jQuery वर्ग के साथ अंतिम तालिका के लिए दिखे table। इसका :lastहिस्सा महत्वपूर्ण है क्योंकि इसका selectorउपयोग यह निर्धारित करने के लिए भी किया जाता है कि बाद में नया रूप क्या डाला जाएगा। बाकी रूपों के अंत में आप इसे अधिक से अधिक चाहेंगे। typeतर्क ताकि हम अद्यतन कर सकते हैं है management_formक्षेत्र, विशेष रूप से TOTAL_FORMS, साथ ही वास्तविक प्रपत्र फ़ील्ड्स। यदि आपके पास एक फ़ॉर्मेट है, तो कहें, Clientमॉडल, प्रबंधन फ़ील्ड की आईडी id_clients-TOTAL_FORMSऔर id_clients-INITIAL_FORMS, जबकि फॉर्म फ़ील्ड के id_clients-N-fieldnameसाथ एक प्रारूप में होगाNफॉर्म नंबर होने के साथ, शुरू करना 0। तो साथ typeतर्क cloneMoreकितने रूपों में समारोह दिखता है वहाँ वर्तमान में कर रहे हैं, और हर इनपुट और की तरह कुछ से सभी फ़ील्ड नाम / आईडी की जगह नए रूप के अंदर लेबल के माध्यम से चला जाता है id_clients-(N)-nameके लिए id_clients-(N+1)-nameऔर इतने पर। समाप्त होने के बाद, यह TOTAL_FORMSनए फॉर्म को प्रतिबिंबित करने के लिए फ़ील्ड को अपडेट करता है और इसे सेट के अंत में जोड़ता है।

यह फ़ंक्शन मेरे लिए विशेष रूप से उपयोगी है क्योंकि जिस तरह से यह सेटअप है, यह मुझे पूरे ऐप में इसका उपयोग करने की अनुमति देता है जब मैं एक फॉर्मसेट में अधिक रूप प्रदान करना चाहता हूं, और मुझे नकल करने के लिए छिपे हुए "टेम्पलेट" फॉर्म की आवश्यकता नहीं है जब तक मैं इसे फॉर्मेट नाम और प्रारूप को पास करता हूं, जब तक कि फॉर्म जमा नहीं हो जाते। आशा करता हूँ की ये काम करेगा।


IE में, क्लोन तत्व से एक क्लोन को जेएस में चयन करते समय <अपरिभाषित> के रूप में दर्शाया जाता है, क्यों?
पंचक्रोशी

मैंने पाया कि Django 1.1 में आपको prefixफॉर्मसेट ऑब्जेक्ट के सदस्य को एक मूल्य निर्दिष्ट करने की आवश्यकता होगी । यह फ़ंक्शन के typeलिए तर्क के समान मूल्य होना चाहिए cloneMore
डेरेक रेनॉल्ड्स

3
मैंने इसके बिना चयनकर्ता को लेने के लिए इसे संशोधित किया: अंतिम और प्रयुक्त var कुल = $ (चयनकर्ता) .length; मेरा कुल प्राप्त करने के लिए क्योंकि पेज का एक रिफ्रेश मेरे फॉर्मेट को हटा देगा लेकिन कुल वृद्धि को छोड़ देगा जिससे गलत संख्या बच जाएगी। मैंने तब जोड़ा: आवश्यकतानुसार चयनकर्ता को अंतिम। इसके लिए धन्यवाद।
ग्रेग

2
मैंने पाया है कि यह $ (यह)। इनपुट खाली करने के लिए चेकबॉक्स को गड़बड़ाना होगा। वैल सेट करना ('') चेकबॉक्स को एक खाली मान विशेषता देता है। और चूंकि चेकबॉक्स मूल्य विशेषता का उपयोग नहीं करते हैं, इसलिए इसे कभी भी अपडेट नहीं किया जाएगा - चाहे आप इसे कितनी बार क्लिक करें। लेकिन ऐसा लगता है कि चेकबॉक्स के "चेक" के लिए मूल्य की तुलना में अधिक प्राथमिकता है। जिसका अर्थ होगा कि आप हमेशा गैर-चेक किए गए चेकबॉक्स को पोस्ट करेंगे।
niklasdstrom

कृपया पाओलो आप मेरी समस्या की जांच कर सकते stackoverflow.com/questions/62252867/...
art_cs

109

empty_formटेम्पलेट के रूप में पाओलो के उत्तर का सरलीकृत संस्करण ।

<h3>My Services</h3>
{{ serviceFormset.management_form }}
<div id="form_set">
    {% for form in serviceFormset.forms %}
        <table class='no_error'>
            {{ form.as_table }}
        </table>
    {% endfor %}
</div>
<input type="button" value="Add More" id="add_more">
<div id="empty_form" style="display:none">
    <table class='no_error'>
        {{ serviceFormset.empty_form.as_table }}
    </table>
</div>
<script>
    $('#add_more').click(function() {
        var form_idx = $('#id_form-TOTAL_FORMS').val();
        $('#form_set').append($('#empty_form').html().replace(/__prefix__/g, form_idx));
        $('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1);
    });
</script>

मैं इसे कैसे देख सकता हूं? जब मैं उपयोग करता CompetitorFormSet = modelformset_factory(ProjectCompetitor, formset=CompetitorFormSets) ctx['competitor_form_set'] = CompetitorFormSet(request.POST)हूं तो मुझे केवल एक ही रूप मिलता है, स्वच्छ विधि में। क्या आप कृपया बता सकते हैं कि विचारों में यह कैसे निपटाएँ?
एजे

शानदार - धन्यवाद। उपलब्ध Django सहायकों (जैसे empty_form) का उत्कृष्ट उपयोग करता है , जिसकी मैं सराहना करता हूं।
BigglesZX

@BigglesZX - मैंने समाधान को अनुकूलित किया है और खाली रूपों की नई पंक्तियां उत्पन्न हो रही हैं। हालाँकि चुनिंदा बक्से ड्रॉप डाउन के बजाय एफके (उपलब्ध) विकल्पों की एक सूची तैयार कर रहे हैं, जो अन्यथा फॉर्म के मूल सेट के लिए उत्पन्न हो रहे हैं। क्या इस प्रकृति का कोई मुद्दा बताया गया है?
user12379095

@ क्या आप बाद के संस्करणों अर्थात 3.x के लिए उत्तर अपडेट कर सकते हैं? यह सरल और स्पष्ट है लेकिन यह मेरे लिए काम नहीं कर रहा है
Poula Adel

1
@PoulaAdel क्या काम नहीं कर रहा है? मैं सिर्फ Django 3.0.5 पर यह कोशिश की और यह अभी भी मेरे लिए काम करता है। 8 साल बाद हैरानी की बात है, लेकिन मुझे लगता है कि पुराने कोड के साथ Django और jQuery की अच्छी पिछड़ी संगतता है।
डेव

25

मैंने एक ऐप से स्निपेट पोस्ट किया है जिसे मैंने कुछ समय पहले काम किया था। पाओलो के समान है, लेकिन आपको फ़ॉर्म हटाने की भी अनुमति देता है।


क्या आप कृपया मेरे मामले में मेरी मदद कर सकते हैं stackoverflow.com/questions/62252867/…
art_cs

18

पाओलो का सुझाव एक कैविएट के साथ खूबसूरती से काम करता है - ब्राउजर के बैक / फॉरवर्ड बटन।

पाओलो की स्क्रिप्ट के साथ बनाए गए गतिशील तत्वों का प्रतिपादन नहीं किया जाएगा यदि उपयोगकर्ता बैकडेट / फॉरवर्ड बटन का उपयोग करके फॉर्मेट पर वापस लौटता है। एक मुद्दा जो कुछ के लिए एक सौदा ब्रेकर हो सकता है।

उदाहरण:

1) उपयोगकर्ता "ऐड-मोर" बटन का उपयोग करके फॉर्मेट में दो नए फॉर्म जोड़ता है

2) उपयोगकर्ता रूपों को पॉप्युलेट करता है और फॉर्मेट को सबमिट करता है

3) उपयोगकर्ता ब्राउज़र में बैक बटन पर क्लिक करता है

4) फॉर्मसेट अब मूल रूप में कम हो गया है, सभी गतिशील रूप से जोड़े गए फॉर्म नहीं हैं

यह पाओलो की पटकथा के साथ एक दोष नहीं है; लेकिन डोम हेरफेर और ब्राउज़र के कैश के साथ जीवन का एक तथ्य।

मुझे लगता है कि एक सत्र में फॉर्म के मूल्यों को संग्रहीत कर सकता है और कुछ अजाक्स जादू है जब फॉर्मेट फिर से तत्वों को बनाने और सत्र से मूल्यों को फिर से लोड करने के लिए लोड करता है; लेकिन एक ही उपयोगकर्ता और फार्म के कई उदाहरणों के बारे में आप कितना गुदा होना चाहते हैं, इस पर निर्भर करता है कि यह बहुत जटिल हो सकता है।

किसी को भी इससे निपटने के लिए एक अच्छा सुझाव है?

धन्यवाद!


2
यदि आप सफल सबमिशन के बाद पुनर्निर्देशित करते हैं, तो बैक बटन में कोई समस्या नहीं है। यदि आप अगली यात्रा में DB से फॉर्म भरते हैं, तो सभी फॉर्म शुरू में दिखाई देते हैं। यदि आप अमान्य इनपुट के कारण प्रपत्रों को विफल करते हैं, तो उन सभी को त्रुटियों के निवारण के लिए होना चाहिए। जब तक मैं आपके बयानों को नहीं समझ पा रहा हूं .... वह पोस्ट सबमिशन रीडायरेक्ट एक अच्छे काम करने वाले ऐप में वास्तव में महत्वपूर्ण है, एक यह कि बहुत सारे कोडर सिर्फ वेब पर चलने वाले खराब व्यवहार वाले ऐप की संख्या के आधार पर नहीं मिलते हैं।
नावक

क्या आप मेरी मदद कर सकते हैं stackoverflow.com/questions/62285767/… , मैं बहुत कोशिश की है, लेकिन एक जवाब नहीं मिला! मैं आपकी बहुत सराहना करता हूँ
art_cs 18

13

डायनामोजिक रूपों के लिए निम्नलिखित समाधान देखें:

http://code.google.com/p/django-dynamic-formset/

https://github.com/javisantana/django-dinamyc-form/tree/master/frm

वे दोनों jQuery का उपयोग करते हैं और django- विशिष्ट हैं। पहले थोड़ा अधिक पॉलिश लगता है और एक डाउनलोड प्रदान करता है जो w / डेमो आता है जो उत्कृष्ट हैं।


11

अनुकरण और अनुकरण करें:

  • एक फॉर्मेट बनाएं जो "जोड़ें" बटन पर क्लिक करने से पहले स्थिति से मेल खाती है ।
  • पृष्ठ लोड करें, स्रोत देखें और सभी <input>फ़ील्ड पर ध्यान दें ।
  • "ऐड" बटन पर क्लिक करने के बाद स्थिति के अनुरूप करने के लिए फ़ॉर्मेट को संशोधित करें (अतिरिक्त फ़ील्ड की संख्या बदलें)।
  • पृष्ठ लोड करें, स्रोत देखें और <input>फ़ील्ड कैसे बदले, इस पर ध्यान दें ।
  • कुछ जावास्क्रिप्ट जो एक उपयुक्त तरीका से इसे स्थानांतरित करने में डोम को संशोधित करता बनाएं से पहले करने के लिए राज्य के बाद राज्य।
  • उस जावास्क्रिप्ट को "ऐड" बटन पर अटैच करें।

जब मुझे पता है कि फॉर्मेट्स विशेष छिपे हुए <input>फ़ील्ड का उपयोग करते हैं और लगभग जानते हैं कि स्क्रिप्ट को क्या करना चाहिए, तो मुझे अपने सिर के ऊपर से विवरण याद नहीं है। मैंने ऊपर जो वर्णन किया है, वह मैं आपकी स्थिति में करूँगा।


क्या आप मेरी मदद कर सकते हैं stackoverflow.com/questions/62285767/… , मैंने बहुत कोशिश की है stackoverflow.com/questions/62285767/ ... लेकिन क्या कोई जवाब नहीं मिला! मैं आपकी बहुत सराहना करता हूँ
art_cs

6

इसके लिए एक jquery प्लगइन है , मैंने इसे Django 1.3 में इनलाइन_फॉर्म सेट के साथ उपयोग किया था, और यह पूरी तरह से काम करता है, जिसमें प्रीपोपुलेशन, क्लाइंट साइड फॉर्म जोड़ना, निकालना और कई इनलाइन_फॉर्म शामिल हैं।


लिंक ब्लॉग पोस्ट अभी भी मौजूद है, वहीं डाउनलोड लिंक टूट गए हैं। जाहिरा तौर पर, प्लगइन @ elo80ka द्वारा बनाया गया था, जिसका उत्तर स्क्रिप्ट के (preliminar?) संस्करण की ओर इशारा करता है।
लफुरनी

क्या आप मेरी मदद कर सकते हैं stackoverflow.com/questions/62285767/… , मैं बहुत कोशिश की है, लेकिन एक जवाब नहीं मिला! मैं आपकी बहुत सराहना करता हूं
art_cs

4

एक विकल्प यह होगा कि हर संभव फॉर्म के साथ एक फॉर्मेट बनाया जाए, लेकिन शुरू में अप्रतिबंधित फॉर्म को छिपाए - यानी display: none;। जब किसी फॉर्म को प्रदर्शित करना आवश्यक होता है, तो यह css प्रदर्शन blockया जो भी उपयुक्त हो, सेट करें ।

आपके "अजाक्स" क्या कर रहा है, इसके बारे में अधिक जानकारी के बिना, अधिक विस्तृत प्रतिक्रिया देना कठिन है।


4

एक और क्लोनमोर संस्करण, जो खेतों के चयनात्मक संजीवनीकरण की अनुमति देता है। जब आपको कई क्षेत्रों को मिटाने से रोकने की आवश्यकता हो तो इसका उपयोग करें।

$('table tr.add-row a').click(function() {
    toSanitize = new Array('id', 'product', 'price', 'type', 'valid_from', 'valid_until');
    cloneMore('div.formtable table tr.form-row:last', 'form', toSanitize);
});

function cloneMore(selector, type, sanitize) {
    var newElement = $(selector).clone(true);
    var total = $('#id_' + type + '-TOTAL_FORMS').val();
    newElement.find(':input').each(function() {
        var namePure = $(this).attr('name').replace(type + '-' + (total-1) + '-', '');
        var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-');
        var id = 'id_' + name;
        $(this).attr({'name': name, 'id': id}).removeAttr('checked');

        if ($.inArray(namePure, sanitize) != -1) {
            $(this).val('');
        }

    });
    newElement.find('label').each(function() {
        var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-');
        $(this).attr('for', newFor);
    });
    total++;
    $('#id_' + type + '-TOTAL_FORMS').val(total);
    $(selector).after(newElement);
}

क्या आप मेरी मदद कर सकते हैं stackoverflow.com/questions/62285767/… , मैं बहुत कोशिश की है, लेकिन एक जवाब नहीं मिला! मैं आपकी बहुत सराहना करता हूँ
art_cs

2

क्लोनमोर फ़ंक्शन के साथ एक छोटा मुद्दा है। चूँकि यह django ऑटो जनरेट किए गए छिपे हुए फ़ील्ड के मूल्य को भी साफ कर रहा है, यह django को शिकायत करता है यदि आप एक से अधिक खाली फॉर्म वाले फॉर्मेट को सहेजने का प्रयास करते हैं।

यहाँ एक तय है:

function cloneMore(selector, type) {
    var newElement = $(selector).clone(true);
    var total = $('#id_' + type + '-TOTAL_FORMS').val();
    newElement.find(':input').each(function() {
        var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-');
        var id = 'id_' + name;

        if ($(this).attr('type') != 'hidden') {
            $(this).val('');
        }
        $(this).attr({'name': name, 'id': id}).removeAttr('checked');
    });
    newElement.find('label').each(function() {
        var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-');
        $(this).attr('for', newFor);
    });
    total++;
    $('#id_' + type + '-TOTAL_FORMS').val(total);
    $(selector).after(newElement);
}

क्या आप मेरी मदद कर सकते हैं stackoverflow.com/questions/62285767/… , मैं बहुत कोशिश की है, लेकिन एक जवाब नहीं मिला! मैं आपकी बहुत सराहना करता हूँ
art_cs 18

2

मुझे लगता है कि यह एक बेहतर समाधान है।

आप Django में एक गतिशील फॉर्मेट कैसे बनाएंगे?

क्या चीजें क्लोन नहीं करती हैं:

  • कोई प्रारंभिक प्रपत्र मौजूद होने पर प्रपत्र जोड़ें
  • जावास्क्रिप्ट को बेहतर तरीके से संभालता है, उदाहरण के लिए django-ckeditor
  • प्रारंभिक डेटा रखें

क्या आप मेरी मदद कर सकते हैं stackoverflow.com/questions/62285767/… , मैं बहुत कोशिश की है, लेकिन एक जवाब नहीं मिला! मैं आपको बहुत पसंद करता हूँ
art_cs

2

कोडर्स के लिए, जो उपरोक्त समाधानों को थोड़ा बेहतर समझने के लिए शिकार के संसाधन हैं:

Django डायनेमिक फ़ॉर्मेट

उपरोक्त लिंक को पढ़ने के बाद, Django प्रलेखन और पिछले समाधानों को बहुत अधिक अर्थ देना चाहिए।

Django प्रारूप दस्तावेज़

एक त्वरित सारांश के रूप में मैं क्या उलझन में था: प्रबंधन प्रपत्र में रूपों का अवलोकन शामिल है। Django को आपके द्वारा जोड़े जाने वाले प्रपत्रों के बारे में जानने के लिए आपको उस जानकारी को सही रखना होगा। (समुदाय, कृपया मुझे सुझाव दें अगर मेरी कुछ शब्दावली यहाँ से हट गई है। Im Django के लिए नया है।)


1

@ पाओलो बर्गेंटिनो

क्लोन करने के लिए संलग्न सभी हैंडलर बस लाइन को संशोधित करते हैं

var newElement = $(selector).clone();

के लिये

var newElement = $(selector).clone(true);

इस समस्या को रोकने के लिए


क्या आप मेरी मदद कर सकते हैं stackoverflow.com/questions/62285767/… , मैं बहुत कोशिश की है, लेकिन एक जवाब नहीं मिला! मैं आपको बहुत पसंद करता हूँ
art_cs

1

हाँ, मैं भी आपको उन्हें html में प्रस्तुत करने की सलाह दूंगा यदि आपके पास प्रविष्टियों की एक सीमित संख्या है। (यदि आप ऐसा नहीं करते हैं तो आपको दूसरी विधि का उपयोग करना होगा)।

आप उन्हें इस तरह छिपा सकते हैं:

{% for form in spokenLanguageFormset %}
    <fieldset class="languages-{{forloop.counter0 }} {% if spokenLanguageFormset.initial_forms|length < forloop.counter and forloop.counter != 1 %}hidden-form{% endif %}">

तब js वास्तव में सरल है:

addItem: function(e){
    e.preventDefault();
    var maxForms = parseInt($(this).closest("fieldset").find("[name*='MAX_NUM_FORMS']").val(), 10);
    var initialForms = parseInt($(this).closest("fieldset").find("[name*='INITIAL_FORMS']").val(), 10);
    // check if we can add
    if (initialForms < maxForms) {
        $(this).closest("fieldset").find("fieldset:hidden").first().show();
        if ($(this).closest("fieldset").find("fieldset:visible").length == maxForms ){
            // here I'm just hiding my 'add' link
            $(this).closest(".control-group").hide();
        };
    };
}

क्या आप मेरी मदद कर सकते हैं stackoverflow.com/questions/62285767/… , मैं बहुत कोशिश की है, लेकिन एक जवाब नहीं मिला! मैं आपकी बहुत सराहना करता हूं
art_cs

1

क्योंकि उपरोक्त सभी उत्तर jQuery का उपयोग करते हैं और कुछ चीजों को थोड़ा जटिल बनाते हैं जिन्हें मैंने निम्नलिखित स्क्रिप्ट में लिखा था:

function $(selector, element) {
    if (!element) {
        element = document
    }
    return element.querySelector(selector)
}

function $$(selector, element) {
    if (!element) {
        element = document
    }
    return element.querySelectorAll(selector)
}

function hasReachedMaxNum(type, form) {
    var total = parseInt(form.elements[type + "-TOTAL_FORMS"].value);
    var max = parseInt(form.elements[type + "-MAX_NUM_FORMS"].value);
    return total >= max
}

function cloneMore(element, type, form) {
    var totalElement = form.elements[type + "-TOTAL_FORMS"];
    total = parseInt(totalElement.value);
    newElement = element.cloneNode(true);
    for (var input of $$("input", newElement)) {
        input.name = input.name.replace("-" + (total - 1) + "-", "-" + total + "-");
        input.value = null
    }
    total++;
    element.parentNode.insertBefore(newElement, element.nextSibling);
    totalElement.value = total;
    return newElement
}
var addChoiceButton = $("#add-choice");
addChoiceButton.onclick = function() {
    var choices = $("#choices");
    var createForm = $("#create");
    cloneMore(choices.lastElementChild, "choice_set", createForm);
    if (hasReachedMaxNum("choice_set", createForm)) {
        this.disabled = true
    }
};

पहले आपको auto_id को गलत पर सेट करना चाहिए और इसलिए आईडी और नाम के दोहराव को अक्षम करना चाहिए । क्योंकि इनपुट नामों को वहाँ के रूप में अद्वितीय होना चाहिए, सभी पहचान उनके साथ की जाती है न कि आईडी के साथ। तुम भी बदलने के लिए form, typeऔर formset के कंटेनर। (उपरोक्त उदाहरण में choices)


क्या आप मेरी मदद कर सकते हैं stackoverflow.com/questions/62285767/… , मैं बहुत कोशिश की है, लेकिन एक जवाब नहीं मिला! मैं बहुत सराहना करता हूँ
art_cs
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.