我正在用现有对象的查询集创建一个表格.表中的几个字段应更改,其他字段应显示但不更改.为了显示不可编辑的字段,我在表单中使用了"disabled"小部件.GET请求做的一切都是正确的.但是POST请求并不保存对解析字段的更改,因为未解析字段是必需的,并且已被禁用并阻止发送现有值. 我try 使用jQuery从example,但它不工作.此外,我不明白如何在形式集中引用不同的id.
型号:
class Order(models.Model):
car = models.ForeignKey(
Car,
blank=True,
null=True,
on_delete=models.PROTECT,
related_name='car_orders',
)
department = models.ForeignKey(
Department,
blank=False,
null=False,
on_delete=models.PROTECT,
related_name='dep_orders',
)
...
观
def orders_list(request, year, month, day):
orders = Order.objects.filter(
order_date__year=year, order_date__month=month, order_date__day=day
)
if request.method == 'POST':
formset = OrderClose表格Set(
request.POST or None, queryset=orders, prefix='order'
)
if formset.is_valid():
formset.save(commit=False)
for form in formset:
form.save()
formset = OrderClose表格Set(queryset=orders, prefix='order')
context = {'orders': orders, 'formset': formset}
return render(request, 'orders/orders_list.html', context)
表格
class OrderClose表格(forms.Model表格):
class Meta:
model = Order
fields = (
'type_car',
'department',
...
)
widgets = {
'car': forms.Select(attrs={'style': 'width: 100%'}),
'department': forms.Select(attrs={'disabled': 'True', 'style': 'width: 100%'}),
...
}
模板
<form method="post" action="{% url 'orders:orders_list' year month day %}">
{% csrf_token %}
{{ formset.management_form }}
{{ formset.non_form_errors.as_ul }}
<table class="table table-order" id="order-formset">
{% for form in formset %}
{% if forloop.first %}
<thead>
<tr>
{% for field in form.visible_fields %}
<th>{{ field.label|capfirst }}</th>
{% endfor %}
</tr>
</thead>
{% endif %}
<tbody>
<tr>
{% for field in form %}
<td>
{% if field == car %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{% if field == form.route_movement %}
<a href="{% url 'orders:order_detail' form.id.value %}">
{{ field|addclass:'input-box input-select' }}
</a>
{% else %}
{{ field|addclass:'input-box input-select' }}
{% endif %}
</td>
{% endfor %}
</tr>
</tbody>
{% endfor %}
</table>
...
</form>
<script>
$('id_order-0-department').submit(function(e) {
$(':disabled').each(function(e) {
$(this).removeAttr('disabled');
})
});
</script>
作为响应,使用NEXT ID获取表单集中的表单ID:
<select name="order-0-department" disabled="True" id="id_order-0-department"></select>
那么,如何创建一个包含可编辑字段的表,但保持字段中的数据不变呢?