SORU
1 ŞUBAT 2009, Pazar


Ajax ile dinamik bir şekilde Django için bir formset bir form ekleme

İstiyorum otomatik olarak Ekle yeni formlar için bir Django formset kullanarak Ajax, böylece kullanıcı tıklattığında bir "Ekle" düğmesi çalışır JavaScript ekler yeni bir formu (hangi parçası formset) sayfa.

CEVAP
21 Mart 2009, CUMARTESİ


Bu, jQuery kullanarak nasıl yaptığımı

Şablon:

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

Bir javascript dosyası:

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);
}

Ne yapar:

cloneMore İlk argüman olarak selector ve 2'nci olarak formset type kabul eder. selector ne yapması gerektiğini yinelenen ya da pas. Bu durumda, bu bir WordPress kullanmak table bir sınıf ile son tablo görünüyor div.table:last geçiyorum. Bunun :last bölümü selector ayrıca yeni form sonra eklenecektir belirlemek için kullanılır, çünkü bu önemlidir. Daha da kalan formlar sonunda istersin. type değişken management_form alan, TOTAL_FORMS gibi gerçek form alanları özellikle güncelleme yapabiliriz. Eğer bir formset tam ki: Client modeller, yönetim alanları olacak Kimlikleri id_clients-TOTAL_FORMS id_clients-INITIAL_FORMS, form alanları olacak bir biçim id_clients-N-fieldname N olmak form numarası ile başlayan 0. Bu yüzden type bağımsız değişken cloneMore fonksiyon bakıyor kaç tane belge var şu anda, geçer her giriş ve etiket içinde yeni bir form yerine tüm alan adları/kimlikleri bir şey gibi id_clients-(N)-name id_clients-(N 1)-name. Tamamlandıktan sonra, TOTAL_FORMS alan yeni form yansıtacak şekilde günceller ve set sonuna ekler.

Bu fonksiyon özellikle yararlı bana çünkü yoludur kurulum sağlar kullanmamı boyunca uygulamayı istediğim zaman sağlamak için daha fazla form bir formset ve yapmaz bana ihtiyacı var gizli bir "şablon" şeklinde yinelenen sürece ben pas formset adı ve biçimi olan bir biçimde ortaya koydu. Umarım yardımcı olur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006
  • WHZGUD2

    WHZGUD2

    21 EYLÜL 2011