Как-то очень давно делал подобное, но для формы адреса. Брал идею с PayPal
https://www.ushanka.com/ вот на этом сайте, добавите товар в корзину и перейдете в саму корзину, далее "Pay with card". Но на этом сайте было критично только для USA, поэтому на все страны у меня настроена default форма, а USA специфичная.
Делается подобное через GET запрос к view которая на вход принимает параметр category (желательно строковый параметр slug), далее во view происходит import нужной Form из forms.py вашего приложения, в случае отсутствия специфичного класса под категорию, через исключение импортируете DefaultCategoryForm, таким же образом подтягиваете шаблон, можно использовать select_template(). Далее этот кусочек формы рендерите и вставляете в ваш HTML.
Но также нужно учесть что при валидации вам нужно подставлять нужную форму. Собрать ее лучше на лету через type().
В другом проекте более простом, я использовал betterforms. Там нужно создавать группы форм, а на атрибут class вешать например slug тех категорий полей которые нужно отображать для конкретной категории. Но этот вариант подойдет для не обязательных полей. То есть везде его использовать не получится