среда, 9 мая 2012 г.

Django. Динамическое создание формы из модели.

Потребовалось мне создать довольно много форм из моделей. Но копипастить для каждой модели свой класс, просто указывая в параметре model нужную форму как-то не есть хорошо. Задался вопросом: Как передать в класс формы только название модели и получить на выходе форму. Вот что вышло:


В forms.py
from django.db.models.loading import get_model
class StandartForm(forms.ModelForm):
    def __init__(self, model, *args, **kwargs): # model - это то, что у нас передается в форму, при вызове, например из views.py: form = StandartForm('model_name')
        super(StandartForm, self).__init__(*args, **kwargs)
        self._meta.model = get_model('app_label', model.title()) # меняем на нужную модель
    class Meta:
        model = AnyModel # задается любая существующая модель
Другого выхода пока не нашел, но работает =)

1 комментарий: