2012-06-19 111 views
0

我需要一些幫助在django中構建動態formset。我明白,一些JavaScript是必需的。我不是JavaScript專家。但是我找到了一些示例代碼,我試圖讓它適合我的特定形式。當我點擊添加按鈕時,什麼都不會發生。我對如何前進感到不知所措。有什麼建議麼?動態formset問題

模型用於參加者事件註冊。顧客可以註冊多個人參加活動。
嘗試獲取添加與會者按鈕。

# models.py 
class Customer(models.Model): 
    event = models.ForeignKey(Event) 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    address1 = models.CharField(max_length=60) 
    address2 = models.CharField(max_length=60, blank=True) 
    city = models.CharField(max_length=30) 
    state = models.CharField(max_length=2) 
    zipcode = models.CharField(max_length=5) 

class Attendee(models.Model): 
    event = models.ForeignKey(Event) 
    sponsor = models.ForeignKey(Customer) 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 

# forms.py 
CustomerFormset = inlineformset_factory(Customer, Attendee, form=AttendeeForm, exclude=('event'), extra=2) 

# templates/register.html 
<form action="/enroll/register3/{{ event.id }}/" method="post">{% csrf_token %} 
<p> Sponsor information: </p> 

<table> 
    {{ customer }} 
</table> 
<hr> 
<p> Students Attending: </p> 
{% for attendee in attendees.forms %} 
<div class="formgroup"> 
    {{ attendee }} 
    {% if attendee.nested %} 
    {% for formset in attendee.nested %} 
    {{ formset.as_table }} 
    {% endfor %} 
    {% endif %} 
</div> 
{% endfor %} 
<div> 
Nothing happens when 'add_more' is clicked. ?? 
<input type="button" value="Add Attendee" id="add_more"> 
<input type="submit" value="Submit"> 
</div> 
</form> 

<script> 
    $('#add_more').click(function() { 
     //cloneMore('div.table:last', 'service'); 
     cloneMore('div.table:last', 'formgroup'); 
    }); 

function cloneMore(selector, type) { 
    console.log('cloneMore'); 
    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); 
} 

</script> 

回答

1

看起來你從this question了JavaScript的,但你沒有適應你的HTML結構。

正如我可以在摘要中看到(這也看起來像它會產生非常無效的HTML,在申報單即TR):

{% for attendee in attendees.forms %} 
<div class="formgroup"> 
    {{ attendee }} 
    {% if attendee.nested %} 
    {% for formset in attendee.nested %} 
    {{ formset.as_table }} 
    {% endfor %} 
    {% endif %} 
</div> 
{% endfor %} 

而他:

{{ serviceFormset.management_form }} 
{% for form in serviceFormset.forms %} 
    <div class='table'> 
    <table class='no_error'> 
     {{ form.as_table }} 
    </table> 
    </div> 
{% endfor %} 

如果你想相同的確切的JavaScript代碼段,那麼你應該有相同的確切的HTML結構。你在JS中做的第一件事是傳遞div.table:最後作爲選擇器,但是你的HTML中沒有div.table。

最好的辦法是嘗試自己製作javascript。作爲一個網頁開發者,javascript會幫助你很多。

+0

我該如何開始調試這些東西?當我點擊添加按鈕時,沒有任何反應。我試着添加一些Firebug的東西,比如'console.log('click');'但是當我這樣做的時候沒有打印。 – codingJoe

+0

您應該在螢火蟲的「腳本」標籤中放置斷點。 http://getfirebug.com/javascript – jpic