Попытка написать завод по производству хрустящих форм

Я пытаюсь написать фабрику форм для возврата форм Crispy с соответствующим объектом-помощником. Вот что у меня получилось. Кажется, что это работает, но также кажется неэлегантным.

def crispy_form_factory( schema):

   namespace = { '_schema': schema }

   for key, info in schema:

       # details omitted. I know this works because I've been using it without crispy.
       # it populates the namespace with things like

       namespace[key] = forms.Charfield( **kwargs)
       ## where kwargs is generated based on info from the schema dict

    form_class = type('Schema_Form', (forms.Form,), namespace )

    class Crispier( form_class):

        def __init__( self, *args, **kwargs):
            super().__init__(*args, **kwargs)

            self.helper=FormHelper(self)   # Crispify
            self.helper.layout = make_layout( self._schema)

    return Crispier

Что я надеялся сделать, так это определить внутреннюю функцию

    def init(self, *args, **kwargs):
        super().__init__( *args, *kwargs)
        self.helper = FormHelper( self)
        self.helper.layout = make_layout( self._schema)

    namespace['__init__'] = init
    return type('Crispy_PRSBlock_Form', (forms.Form,), namespace )

но "магия" super() не работает, когда используется таким образом.

Каким элегантным способом можно внедрить объект макета Crispy в функцию фабрики форм? (Ответ может лежать в метаклассах Python, которые я, признаться, не очень понимаю)

Элегантность в сторону, есть ли какие-либо конкретные причины, почему не делать это так, как я нашел, который, кажется, работает?

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