Как получить доступ к подмножеству kwargs.pop или другой способ установки различных форм в зависимости от типа вопроса?

Я создаю приложение для опроса, в котором есть вопросы с атрибутом type, где он может быть checkbox, textarea или radio. У него также есть модель опций (которая имеет вопрос в качестве внешнего ключа)

В моей форме ответа я хочу передавать различные типы формы в зависимости от типа вопроса. Пока что у меня есть: (со всеми вопросами и опциями, имеющими форму типа radio...

)
class Question(models.Model):
    survey = models.ForeignKey(Survey, on_delete=models.CASCADE)
    prompt = models.CharField(max_length=128)
    class Type(models.TextChoices):
        YesOrNo = 'YesOrNo'
        Text = 'Text'
        MultipleChoice = 'MultipleChoice'
        CheckBox = 'CheckBox'
    type = models.CharField(max_length=15,
                            choices=Type.choices, default=None, blank=True, null=True)

class Option(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    text = models.CharField(max_length=128)

А в моих Формах у меня есть:

class QuestionForm(forms.ModelForm):
    class Meta:
        model = Question
        fields = ["prompt", "type"]


class OptionForm(forms.ModelForm):
    class Meta:
        model = Option
        fields = ["text"]

class AnswerForm(forms.Form):
    def __init__(self, *args, **kwargs):
        options = kwargs.pop("options")
        choices = {(o.pk, o.text) for o in options}
        super().__init__(*args, **kwargs)
        option_field = forms.ChoiceField(
            choices=choices, widget=forms.RadioSelect, required=True)
        self.fields["option"] = option_field
Вернуться на верх