我的应用看起来像这样:
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
我觉得我真的很接近让它发挥作用,并会感激任何指示。
答案 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'),