Я выполнил инструкции , чтобы настроить django -dynami c -formset для своего проекта и моих определенных c встроенных наборов форм.
{{Edit}}
Цель состоит в том, чтобы предоставить простой способ добавления и удаления отдельных форм в наборе форм.
{{End edit}}
Кажется, что все наборы форм работают, кроме одного, включающего внешний ключ. Когда я «добавляю другое», оно дублирует это поле прямо под ним.
Перед нажатием «добавить еще»:
После нажатия «добавить еще»:
Форма набора:
<h3>Services</h3>
<div class="row">
{{ services_formset.management_form }}
{% for formserve in services_formset %}
{{ formserve.non_field_errors }}
<div class="container" id="services_formset">
<div class="row" name="service_form">
{% for hidden in formserve.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in formserve %}
{% if field.name != 'index' and field.name != 'invoice'%}
<div class="col-sm">
{{ field.errors }}
{{ field|as_crispy_field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
</div>
{% endif %}
{% endfor %}
</div>
</div>
javascript:
<script type="text/javascript">
$(function() {
$('#services_formset').formset({
prefix: '{{ formserve.prefix }}'
});
})
</script>
РЕДАКТИРОВАТЬ: я использую inlineformset_factory
для его создания :
ServicesFormset = inlineformset_factory(TransactionsTable, TransSpTable, fields=('service','fee','qty','taxrate','tax','sub'), extra=1, widgets=services_widgets, can_delete=True)
Затем я создаю его экземпляр с помощью функции, которая проверяет, является ли это представление создания или детализации и POST или нет:
context['services_formset'] = get_dynamic_formset(self, ServicesFormset)
def get_dynamic_formset(view, FormSetClass):
if view.object:
if view.request.POST:
dynamic_formset = FormSetClass(view.request.POST, instance=view.object)
else:
dynamic_formset = FormSetClass(instance=view.object)
else:
if view.request.POST:
dynamic_formset = FormSetClass(view.request.POST)
else:
dynamic_formset = FormSetClass()
return dynamic_formset