Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Forms. Передача параметров из views.py в class Meta у forms.ModelForm [RSS Feed]

#1 Май 8, 2012 04:21:17

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

Доброго времени суток! Подскажите пожалуйста, как я могу вот в таком коде:

class AnyForm(forms.ModelForm):
    def __init__(self, myvar, *args, **kwargs):
        super(AnyForm, self).__init__(*args, **kwargs)
    class Meta:
        test = myvar

обратится к myvar внутри class Meta? myvar приходит из views.py. Мой код выдает “name ‘myvar’ is not defined”



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

#2 Май 9, 2012 01:34:08

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

А как вы это делаете? Обращаетесь к переменной класса, или переменной инстанса?

Офлайн

#3 Май 9, 2012 01:50:16

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

А вот понять не могу как обратится нужно. Нужно то по идее присвоить переменной model в class Meta значение полученное из views.py. Насколько я понял model вообще не является членом класса. Или нет?

Просто все формы у меня 1 в 1 как модели. Хочется получать форму из параметров адресной строки. Может я велосипед изобретаю и есть более простое решение?



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Отредактировано barabansheg (Май 9, 2012 01:57:02)

Офлайн

#4 Май 9, 2012 02:16:09

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

barabansheg
А вот понять не могу как обратится нужно. Нужно то по идее присвоить переменной model в class Meta значение полученное из views.py
Нет, так сделать нельзя. Meta используется во время инициализации класса. Но можно попробовать сделать это, если мне не изменяет память, в AnyForm._meta - это свойство должно дать вам возможность поменять параметр test на нужный. Но я слабо представляю как это связано с похожесть форм и моделей.
Вы объясните подробнее что вы хотите сделать, посоветовать будет проще.

Офлайн

#5 Май 9, 2012 02:21:26

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

У меня есть модели. Под каждую из них нужна форма. Если под каждую модель копировать код:

class AnyForm(forms.ModelForm):
    class Meta:
        model = any_model
то получается много повторяющегося кода. Хочется универсальный класс, который в зависимости от имени модели вернет форму этой модели.



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Отредактировано barabansheg (Май 9, 2012 02:21:48)

Офлайн

#6 Май 9, 2012 02:39:41

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

Model formsets?

Отредактировано Ferroman (Май 9, 2012 02:39:53)

Офлайн

#7 Май 9, 2012 02:53:38

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

Наверно, если пошаманить, то пойдет. Поиграюсь, спасибо. =) Изменить 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 # задается любая существующая модель
Спасибо огромное за помощь!



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Отредактировано barabansheg (Май 9, 2012 03:01:36)

Офлайн

#8 Май 9, 2012 03:05:18

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

Он позволяет создать моделформу динамически вместо статического объявления. По-моему как раз то, что вам нужно.

Офлайн

#9 Май 26, 2012 10:42:30

vvpoloskin
От:
Зарегистрирован: 2011-09-02
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

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})
           
Таким образом у тебя для каждой модели будет метод form, возвращающий форму:)



Отредактировано vvpoloskin (Май 26, 2012 10:48:40)

Офлайн

#10 Июнь 1, 2012 09:10:59

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Forms. Передача параметров из views.py в class Meta у forms.ModelForm

Используйте CBV

class MyView(CreateView):
    model = MyModel



Офлайн

  • Начало
  • » Django
  • » Forms. Передача параметров из views.py в class Meta у forms.ModelForm[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version