Несколько страниц УСТРОЙСТВА могут отображаться на странице (Заказ) в виде вкладок.Когда пользователь закрывает вкладку и нажимает save
, а затем арендует этот конкретный Заказ (ID), пользователь все еще видит свою удаленную вкладку.В качестве быстрого решения, в html-код был встроен флажок, но это нежелательно.
В настоящее время код в моем view.py
выглядит следующим образом.
def edit_order(request,id = None, order_id = None):
order = Order.objects.get(id=id)
'''some stuff'''
if request.method == 'POST':
formCustomer = CustomerModelForm(request.POST,instance=Customer.objects.get(order=order.id))
formInfo = InfoModelForm(request.POST,instance=Info.objects.get(order=order.id))
DBFormSet = modelformset_factory(DB, extra=1, can_delete=True, form=LUNModelForm)
formset = DBFormSet(request.POST or None, queryset=DB)
if formset.is_valid():
for i,frm in enumerate(formset.forms):
if frm.cleaned_data['id']:
if frm.is_valid():
if not frm.cleaned_data['capacityGB'] > 0:
frm.cleaned_data['id'].delete()
elif frm.cleaned_data['DELETE'] == True:
frm.cleaned_data['id'].delete()
#frm.save() or formset.save() ??
else:
dev = frm.cleaned_data['id']
dev.capacity = frm.cleaned_data['capacity']
dev.save()
Я подозревал, что проблемато, что вкладка не оставалась закрытой, было проблемой с "can_delete
", но, кажется, это не имеет значения, когда я добавил это.Затем я прочитал , что проблема может быть связана с formset.save
, который также ничего не решил.Ниже html-кода:
html:
<ul class="nav nav-tabs" id="tab4Headers">
{% for form in formsetDEVICE.forms %}
{% if forloop.first %}
{% if form.errors %}
<li class="active"><a href="#tab4_{{forloop.counter}}" data-toggle="tab">DEVICE <i class="icon-warning-sign"></i> </a></li> <!-- section 4.1 -->
{% else %}
<li class="active"><a href="#tab4_{{forloop.counter}}" data-toggle="tab">DEVICE</a></li> <!-- section 4.1 -->
{% endif %}
{% else %}
{% if form.errors %}
<li><a href="#tab4_{{forloop.counter}}" data-toggle="tab"><button class="close" type="button" id="close-tab4_{{forloop.counter}}">×</button>DEVICE <i class="icon-warning-sign"></i> </a></i></li> <!-- section 4.2 ... 4.n -->
<!--{% if formsetDEVICE.can_delete %}
<li>{{ form.DELETE }}</li>
{% endif %}-->
{% else %}
<li><a href="#tab4_{{forloop.counter}}" data-toggle="tab"><button class="close" type="button" id="close-tab4_{{forloop.counter}}">×</button>DEVICE</a></li> <!-- section 4.2 ... 4.n -->
<!--{% if formsetDEVICE.can_delete %}
<li>{{ form.DELETE }}</li>
{% endif %}-->
{% endif %}
{% endif %}
{% endfor %}
</ul>
Поскольку не ясно, как удалить вкладку, закрыв вкладку (а затем нажав кнопку save
), текущая работавокруг просто вставить раздел на вкладку с включенным флажком, например:
{# --- delete item --- #}
{% if form.instance.pk %}
{# render row for DELETE-flag only for forms with existing instance #}
<tr>
<td colspan="2">
</td>
<td colspan="2">
edit Action required: <br/><br/>
{{form.DELETE|safe}} delete this DEVICE from the Order.
</td>
</tr>
{% endif %}
{# --- END delete item --- #}
Текущий обходной путь работает, но это не желаемая функциональность.Я попробовал некоторые из предложенных вариантов здесь , но безрезультатно.Я думаю, что проблема больше связана со ссылкой между html и view.py (поэтому что-то делать с frm.cleaned_data['DELETE']
, хотя я могу ошибаться.
РЕДАКТИРОВАТЬ:
Я подозреваю, что нужно обойти это, JS-код и / или CSS должны быть вставлены.