اذهب إلى المحتوى

السؤال

نشر

أريد إضافة نماذج جديدة form ديناميكيًا إلىformset في جانغو Django، بحيث عندما ينقر المستخدم على زر "إضافة" ، فإنه يقوم بتشغيل JavaScript الذي يضيف نموذجًا جديدًا (وهو جزء من formset) إلى الصفحة. كيف أقوم بهذا الأمر؟

Recommended Posts

  • 1
نشر

يمكنك أن تقوم بهذا الأمر بطريقة سهلة من خلال jQuery ، كالتالي:

{{ serviceFormset.creating_form }}
<div class="form_set">
    {% for f in serviceFormset.forms %}
        <table class='no_error form'>
            {{ f.as_table }}
        </table>
    {% endfor %}
</div>
<input type="button" value="Add New Form" id="add">
<script>
    $('#add').click(function() {
        addMoreForms('table.form:last', 'service');
    });
</script>

الكود السابق (في القالب template) يقوم بعرض نموذج جديد عند الضغط على زر Add New Form.

ودالة addMoreForms، ستكون كالتالي:

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

هذه الدالة مفيدة بشكل كبير لأن طريقة إعدادها تسمح لك باستخدامها في جميع أنحاء التطبيق عندما ترغب في عرض المزيد من النماذج في formset.

  • 0
نشر

إليك نسخة مبسطة من إجابة سامح باستخدام نموذج فارغ كقالب:

<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>

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...