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

إضافة نموذج ديناميكيًا إلىformset في جانغو Django

Amer Abdallah

السؤال

أريد إضافة نماذج جديدة 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...