Моя програма виглядає так:
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 }}"
});
Це майже спрацьовує - я можу додати один суб-об'єкт до мого набору форм, і подати форму, і це save()
s успішно.
Однак, якщо я натискаю кнопку "додати іншу", коли пізніше я натискаю на другий вхід, клонований django-dynamic-formset, автозаповнення з перший Об'єкт formet активується. Схоже, що select2 не знає, що новий рядок додано ...
Я зробив купу читання і, очевидно, формати є новим елементом у select2: https://github.com/applegrew/django-select2/pull/127
Я відчуваю, що я дуже близька до того, щоб вона працювала, і була б вдячна за будь-які покажчики.
Відповіді:
0 для відповіді № 1Я маю подібне налаштування, але використовую Select2 безпосередньо замість програми Django. У мене була та ж проблема з django-dynamic-Formet і виправлення для мене було змінювати jquery.formset.js
, щоб перейти з .clone(true)
, що є клоном подій, до .clone(false)
який клонує структуру, але виключає події 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"),