我想使用带有'django-autocomplete-light field'的内联模型表单。我也有点绝望,因为我不太了解'javascript'。 这是我的形式的图片。乍一看,它按预期工作:
不幸的是,只有第一个字段正确加载。如果我添加更多字段,则会出现错误(参见图片)。
这是我的表单模板,我怀疑错误,因为第一个字段可以正常工作。
<div class="container">
<form method="post" action="">
{% csrf_token %}
{{ form.as_p }}
<!-- Medication Table -->
<table class="table">
{{ medication.management_form }}
{% for form in medication.forms %}
{% if forloop.first %}
<thead>
<tr>
{% for field in form.visible_fields %}
<th>{{ field.label|capfirst }}</th>
{% endfor %}
</tr>
</thead>
{% endif %}
<tr class="{% cycle "row1" "row2" %} formset_row">
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<input type="submit" value="Submit Form"/>
<script type="text/javascript" src="{% static '/js/core/jquery.3.2.1.min.js' %}"></script>
{{ form.media }}
<!-- script for add, delete, update -->
<script src="{% static 'formset/jquery.formset.js' %}"></script>
<script type="text/javascript">
$('.formset_row').formset({
addText: 'add medication',
deleteText: 'remove',
prefix: 'medication_set'
});
</script>
</div>
答案 0 :(得分:0)
经过几个小时的搜索并经历了其他答案,对我有用的是这个。
我在jquery.formset.js的默认值中添加了一个名为clone
的键,默认值为true。
/* Setup plugin defaults */
$.fn.formset.defaults = {
prefix: 'form', // The form prefix for your django formset
formTemplate: null, // The jQuery selection cloned to generate new form instances
clone: true, // Set this value to false when using autocomplete in formset
addText: 'add another', // Text for the add link
deleteText: 'remove', // Text for the delete link
addCssClass: 'add-row', // CSS class applied to the add link
deleteCssClass: 'delete-row', // CSS class applied to the delete link
formCssClass: 'dynamic-form', // CSS class applied to each form in a formset
extraClasses: [], // Additional CSS classes, which will be applied to each form in turn
keepFieldValues: '', // jQuery selector for fields whose values should be kept when the form is cloned
added: null, // Function called each time a new form is added
removed: null // Function called each time a form is deleted
};
然后从以下位置替换了jquery.formset.js中addButton.click()
中的代码
row = options.formTemplate.clone(true).removeClass('formset-custom-template')
到
row = options.formTemplate.clone(options.clone).removeClass('formset-custom-template')
然后在表单集的模板中,从此更改表单集功能:
$('#brand_formset_div .parentdiv .form-group').formset({
prefix: '{{ brand_formset.prefix }}',
deleteText: 'Clear',
deleteCssClass: 'shop-now-delete',
addText: 'Add new Brand',
addCssClass: 'btn btn-success ',
});
为此(插入为false的克隆键以及插入新行时触发的功能added
。该功能隐藏了额外的自动完成框。)
$('#brand_formset_div .parentdiv .form-group').formset({
prefix: '{{ brand_formset.prefix }}',
clone: false,
deleteText: 'Clear',
deleteCssClass: 'shop-now-delete',
addText: 'Add new Brand',
addCssClass: 'btn btn-success ',
added: function(row) {
$('span .select2-selection--single:odd', row || null).css("display", "none");
}
});
这对我来说很好。