Как я могу позволить пользователю динамически добавлять новое поле в Django-форму, вместо того чтобы заставлять его добавлять всю форму при каждом добавлении?

В forms.py:

class BillGateway(forms.Form):
    from_date=forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}), label='From ', label_suffix=' - ')
    to_date=forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}), label='To ', label_suffix=' - ')
    billing_date=forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}), label='Date of Billing ', label_suffix=' - ')
    rt_cash_amount_desc=forms.CharField(label='RT Cash Amount Description', label_suffix=' - ', required=False)
    rt_cash_amount=forms.DecimalField(label='RT Cash Amount', label_suffix=' - ', required=False)
    other_desc=forms.CharField(label='Other Head', label_suffix=' - ', required=False)
    other_amount=forms.DecimalField(label="Other Head's Amount", label_suffix=' - ', required=False)

В views.py:

def bill_gateway_view(request):
    if request.method=='POST':
        fro=request.POST.get('from_date')
        to=request.POST.get('to_date')
        bill_date=request.POST.get('billing_date')
        rt_cash_desc=request.POST.get('rt_cash_amount_desc')
        rt_cash_amount=request.POST.get('rt_cash_amount')
        other_desc=request.POST.get('other_desc')
        other_amount=request.POST.get('other_amount')
        request.session['fro']=fro
        request.session['to']=to
        request.session['bill_date']=bill_date
        request.session['rt_cash_desc']=rt_cash_desc
        request.session['rt_cash_amount']=rt_cash_amount
        return HttpResponseRedirect('/provisional_bill/')
    else:
        form=BillGateway()
        return render(request, 'account/bill_gateway.html', {'form':form})

В шаблонах:

<form action="" method="post" novalidate>
        {% csrf_token %}
        {{form.as_p}}
        <button type="submit" id="savebtn">Proceed</button>
    </form>

Теперь, чего я хочу добиться, это позволить пользователю расширить поля other, оба, other_desc и other_amount, если ему/ей нужно заполнить больше деталей в счетах.

Я довольно новичок в этой концепции. Я видел некоторые учебники, в которых преподаватели в основном использовали htmx для достижения таких вещей и казались довольно крутыми и простыми, но то, что они делали, это добавление всей формы снова после нажатия кнопки добавления. Я просто хочу, чтобы пользователь мог добавить только эти два поля, а не всю форму. Как я могу этого добиться? Я потратил целый день на поиски подходящего решения в Интернете, но так и не смог этого сделать. Есть ли способ сделать это с помощью самого htmx? Или что-то другое, что может помочь мне справиться с этой задачей? Заранее спасибо.

Если я правильно вас понял, вам нужно дать пользователю возможность обновить эти 2 поля (other_desk, other amount), для этого вы можете использовать представление класса update из django или создать собственное представление, в обоих случаях вам нужно включить только эти 2 поля в форму обновления, если вы собираетесь создать собственное представление, то вам нужно передать id номер объекта bill gateway в качестве аргумента функции представления или его slug, если поле slug доступно

Вернуться на верх