Я какое-то время следил за различными учебниками и пытался понять / собрать их все вместе, чтобы у моего пользователя была возможность динамически добавлять экземпляры для потомка в рамках inlineformset_factory.
Мой проектпростой сотрудник / смены настроены.Моя родительская модель - это модель ManagerChecklist , которую менеджер завершит в конце дня.Дочерняя модель - это модель EmployeeShift , которая содержит информацию о каждом из сотрудников, которые работали в эту смену, и в какие часы они работали.Я хотел бы, чтобы мой менеджер мог динамически добавлять сотрудников в свою форму «контрольного списка менеджера».
views.py
def update_manager_checklist(request, date):
template_name = 'shifts/checklists/manager_checklist_update.html'
instance = get_object_or_404(ManagerChecklist, shift__shift_date=date)
checklist = inlineformset_factory(ManagerChecklist, EmployeeShift,
fields=('employee', 'start_time',
'end_time', 'total_hours_worked',
),
extra=0, max_num=None)
if request.method == 'POST':
formset = checklist(request.POST, instance=instance)
if formset.is_valid():
formset.save()
return redirect('shifts:shift_list')
formset = checklist(instance=instance)
return render(request, template_name, {
'formset': formset,
})
html:
{{ formset.management_form }}
<div id="form_set">
{% for form in formset %}
<table class='no_error'>
{{ form.as_table }}
</table>
{% endfor %}
</div>
<input type="button" value="Add More" id="add_more">
<div id="empty_form" style="display:none">
<table class='no_error'>
{{ formset.empty_form.as_table }}
</table>
</div>
javascript:
<script>
$('#add_more').click(function() {
var form_idx = $('#id_form-TOTAL_FORMS').val();
$('#form_set').append($('#empty_form').html().replace(/__prefix__/g, form_idx));
$('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1);
});</script>
Javascript отлично работает для визуального добавления форм на страницу - однако они не проверяются, не добавляются и не отправляются явно в views.py.Если я обновляю существующие формы или создаю дополнительную смену сотрудников, используя extra = 1 вместо extra = 0, тогда он корректно проверяет и добавляет это.
Я предполагаю, что мне нужно добавить некоторый код в мои views.py, чтобычто он подберет formset.empty_form
, который динамически добавляется?Или, может быть, есть проблема с информацией, которую javascript отправляет в django?
Заранее спасибо за любую помощь.