There is no simple solution to this problem. I'm going to try and break this explanation down into simpler parts for you, but please remember this is pretty hard stuff if you're not familiar with Django. I would second @Melvyn's advice, but if you really need to get this done you need to be patient and read.
The general idea is that you create a form, and then you make a formset which is a form of forms. The formset holds multiple forms at the same time, so in your case, you would need a form for a 'Tax' such as 'TaxForm' and then you also would need a formset to hold all the TaxForms such as 'TaxFormset'.
Django formsets (mentioned above) are only the backend part of how this solution comes together. Spend some time reading the
documentation that @C Kirby linked. They explain that a formset contains two parts: the management forms and x number of forms. The management form will say to Django "okay we're entering three forms, which is one more than we used to have." This management form allows Django to match up each of the forms to their respective objects. All these parts get entered in in variables of the POST request.
Now, the problem is that Django only helps you on the backend here. Django expects the management form to be filled out correctly, and the data in the formsets to be lined up. To achieve this, you have to do work on the frontend to create things like an 'add' button or a 'remove' button. The javascript on the front end is responsible for turning a button press (something like 'click to add tax' into "tax-INITIAL-FORMS=1" and "tax-TOTAL-FORMS=2."
Personally, I've used this JQuery script:
https://github.com/elo80ka/django-dynamic-formset which has allowed me to have an 'add' and 'remove' buttons similar to what you have shown. It will handle the heavy lifting of making this translation of button presses to management form data.
Hope this helps.