Форум сайта python.su
Доброго времени суток! Подскажите пожалуйста, как я могу вот в таком коде:
class AnyForm(forms.ModelForm): def __init__(self, myvar, *args, **kwargs): super(AnyForm, self).__init__(*args, **kwargs) class Meta: test = myvar
Офлайн
А как вы это делаете? Обращаетесь к переменной класса, или переменной инстанса?
Офлайн
А вот понять не могу как обратится нужно. Нужно то по идее присвоить переменной model в class Meta значение полученное из views.py. Насколько я понял model вообще не является членом класса. Или нет?
Просто все формы у меня 1 в 1 как модели. Хочется получать форму из параметров адресной строки. Может я велосипед изобретаю и есть более простое решение?
Отредактировано barabansheg (Май 9, 2012 01:57:02)
Офлайн
barabanshegНет, так сделать нельзя. Meta используется во время инициализации класса. Но можно попробовать сделать это, если мне не изменяет память, в AnyForm._meta - это свойство должно дать вам возможность поменять параметр test на нужный. Но я слабо представляю как это связано с похожесть форм и моделей.
А вот понять не могу как обратится нужно. Нужно то по идее присвоить переменной model в class Meta значение полученное из views.py
Офлайн
У меня есть модели. Под каждую из них нужна форма. Если под каждую модель копировать код:
class AnyForm(forms.ModelForm): class Meta: model = any_model
Отредактировано barabansheg (Май 9, 2012 02:21:48)
Офлайн
Отредактировано Ferroman (Май 9, 2012 02:39:53)
Офлайн
Наверно, если пошаманить, то пойдет. Поиграюсь, спасибо. =) Изменить AnyForm._meta не прокатило. Выдает ошибку, что у формы нет аттрибута _errors.
Этот модуль создан для того, что бы редактировать несколько форм на странице. Не совсем то. Ну, да ладн.
———————
Вот так работает как мне и нужно:
class StandartForm(forms.ModelForm): def __init__(self, model, *args, **kwargs): super(StandartForm, self).__init__(*args, **kwargs) self._meta.model = get_model('app_label', model.title()) # меняем на нужную class Meta: model = AnyModel # задается любая существующая модель
Отредактировано barabansheg (Май 9, 2012 03:01:36)
Офлайн
Он позволяет создать моделформу динамически вместо статического объявления. По-моему как раз то, что вам нужно.
Офлайн
def generate_form(model): class Meta: model = Model return type('%sForm'%model, (ModelForm, ), {'Meta':Meta}) form_list = [generate_form(i) for i in model_list]
class StandartModel(Model): @classmethod def form(cls, *args, **kwargs): class Meta: model = cls return type('%sForm'%model, (ModelForm, ), {'Meta':Meta})
Отредактировано vvpoloskin (Май 26, 2012 10:48:40)
Офлайн
Используйте CBV
class MyView(CreateView): model = MyModel
Офлайн