Django: Отображение одной и той же формы несколько раз в одном представлении
Мне нужно открыть одну и ту же форму несколько раз, перебирая некоторые элементы.
Это форма:
class CancelRefundForm(forms.forms.Form):
cancel = forms.BooleanField(label='Check to cancel the refund', required=True ,widget=forms.CheckboxInput(attrs={
'class': 'hidden-checkbox',
'name': 'hiddenCheckBoxName'
}
))
item = forms.IntegerField(
required=True,
widget=forms.NumberInput(attrs={
'class': 'cancel-item-input',
'value': '',
'type': 'hidden'
}),
)
Это HTML:
В этом html я отображаю товары, заказанные пользователем из старого заказа, который он сделал, где пользователь может выбрать возврат определенного товара. Если пользователь запрашивает возврат, шаблон отображает форму, которая спрашивает, хочет ли пользователь отменить возврат. Если пользователь решит вернуть более одного товара из одного заказа, мне придется отобразить форму отмены возврата по одному разу для каждого товара.
В своих взглядах я имею:
def order_details_view(request, slug):
dataCart = cartData(request)
cancelForm = CancelRefundForm()
# toRefundItems = len(OrderItem.objects.filter(order = order, refund_requested = True))
# cancelRefundFormSet = formset_factory(CancelRefundForm, extra=toRefundItems)
# formset = cancelRefundFormSet()
order.refund_deadline = order.refund_deadline.astimezone(timezone.utc).replace(tzinfo=None)
if request.method == 'POST':
cancelForm = CancelRefundForm(request.POST)
# formset = cancelRefundFormSet(request.POST)
# CANCEL REFUND FORM LOGIC
if cancelForm.is_valid():
itemId = cancelForm.cleaned_data['item']
orderItem = OrderItem.objects.get(order = order, item = itemId)
if orderItem.refund_requested == True:
orderItem.refund_requested = not cancelForm.cleaned_data['cancel']
orderItem.save()
refund = RefundedItems.objects.get(order = order, item = orderItem)
refund.delete()
order.save()
messages.success(request, f'You successfully canceled the refund of the item {orderItem.id}.')
return redirect(f'/order_details/{order.slug}/')
context = {
'order': order,
'cancelForm': cancelForm,
# 'cancelForm': formset,
'nowDate': datetime.datetime.now(),
'cartItems': dataCart['cartItems'],
}
return render(request, 'users/order_details.html', context)
Как вы можете видеть по комментариям, я пытался использовать formset_factory, но это не сработало потому что мне нужно было открыть более одной формы. И способ, который я описал выше, также не работает должным образом. Несколько форм отображаются в шаблоне, но когда я ставлю галочку в любой форме, обновляется только первая.
Должен ли я создать другое представление и шаблон, чтобы справиться с этим, используя наборы форм? Или я что-то упускаю?
Спасибо
Для всех, у кого возник тот же вопрос, я решил сделать одну форму для каждого элемента, который мне нужен, используя Javascript, затем я отобразил ее в шаблоне и подключил форму к новому представлению, которое обрабатывает только информацию формы отмены возврата.