集成django-select2(自动完成)和django-dynamic-formset(动态表单集)

时间:2014-10-12 09:58:55

标签: django django-forms

我的应用看起来像这样:

forms.py:

class SubForm(forms.ModelForm):

    myfield = GreatChoices()
    class Meta:
        model = Sub

MyFormSet = inlineformset_factory(My, Sub, extra=1, form=SubForm)

class GreatChoices(AutoModelSelect2Field):
    queryset = Great.objects

template.html

<form id="great" method="post" action="{% url "great-add" %}">{% csrf_token %}                                                        
        {{ form }}                                                                                                                      
        <h3>Greats</h3>                                                                                                            
        <table>                                                                                                                         
                <tbody>                                                                                                                 
                        {% for f in formset.forms %}                                                                                    
                        <tr>                                                                                                            
                                <td>                                                                                                    
                                  {% if f.instance.pk %}{{ f.DELETE }}{% endif %}</td>                                                                                
                        </tr>                                                                                                           
                        {% endfor %}                                                                                                    
                </tbody>                                                                                                                
        </table>                                                                                                                        
        {{ formset.management_form }}                                                                                                   
    <input id="save_great" type="submit" value="Add">                                                                                  
</form>

template.js

$(document).ready(function() {                                                                                                  
    $('form#recipe tbody tr').formset({                                                                                         
        prefix: '{{ formset.prefix }}'                                                                                          
    });     

这几乎可以工作 - 我可以在我的formset中添加一个Sub对象,并提交表单,并成功save()

但是,如果我点击&#34;添加另一个&#34;当我稍后点击第二个输入,由django-dynamic-formset克隆时,第一个 formset对象的自动完成被激活。好像select2没有意识到已经添加了一个新行......

我做了一堆阅读,显然formset是select2中的一个新功能: https://github.com/applegrew/django-select2/pull/127

我觉得我真的很接近让它发挥作用,并会感激任何指示。

1 个答案:

答案 0 :(得分:0)

我有类似的设置,但直接使用Select2而不是Django应用程序。我有与django-dynamic-formset相同的问题,对我来说修复是修改jquery.formset.js以从.clone(true)(具有事件的克隆)切换到.clone(false)克隆结构但是遗漏了已经挂钩到现有formset的jQuery事件。

变化很简单,搜索这样的行:

template = $('.' + options.formCssClass + ':last').clone(true).removeAttr('id');

row = options.formTemplate.clone(true).removeClass('formset-custom-template'),

并将.clone(true)更改为.clone(false)

template = $('.' + options.formCssClass + ':last').clone(false).removeAttr('id');

row = options.formTemplate.clone(false).removeClass('formset-custom-template'),