2016-10-22 3 views
0

Я пытаюсь создать мастер для заполнения данных в DataBase. Я стараюсь session.Wizard без успеха, и я не думаю, что это то, что нужно. исправьте меня, если я ошибаюсь.FormView CBV change ModelForm за запрос

поэтому в моей базе данных есть несколько таблиц, которые должны быть заполнены, из-за суставов, которые необходимо выполнить, я хотел сделать хороший мастер, который доставит вас по пути.

так что у меня есть базовый шаблон, который будет иметь шаги, иногда нет необходимости создавать новые данные, если они все готовы. , поэтому я сделал отображение каждой таблицы в шаблоне, чтобы пользователь мог проверить, содержит ли таблица то, что ему нужно для следующего шага, или ему нужно его создать.

Я сделал ОЦК FormView , и я пытаюсь получить шаг от GET и загрузить необходимую ModelForm

model.py

Class A(models.Model): 
    user = CharField() 
class B(models.Model): 
    pupy = CahrField() 

form.py

AForm(forms.ModelForm): 
    class Meta: 
     model=A 
     fields = ['user'] 

BForm(forms.ModelForm): 
    class Meta: 
     model=B 
     fields = ['pupy'] 

Просмотры .py

class Wizard(FormView) 
    template_name = 'test.html' 
    def get(self, request, *args, **kwargs): 
     self.step = self.request.GET.get('step') 
     self.form_class = FORM[self.step] # FORM = dict {'step': ModelForm} 
    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.save() 

Я не могу набрать здесь все, что я пробовал до сих пор, в основном я действительно получил свою форму в html, щелкнув ссылки , но у меня есть trub, сохраняющий их, мне удалось сохранить первую форму if II сделать

def __init__ 
    self.step = 'first_step' 

только как тест

ответ

0

нашел ответ от другого поста, который работает путем объединения 2-х человек ответить Switch case for form_class and template_name

@Denny Кран

class Foo(FormView): 
    def dispatch(self, request, *args, **kwargs): 
     self.var = request.session['sessionvar']['var'] 
     if self.var == some_value: 
      form_class = form1 
      template_name = template1 
     elif self.var == another_value: 
      form_class = form2 
      template_name = template2 
     [...] 
     return super(Foo, self).dispatch(request, *args, **kwargs) 

@Serafeim

необходимость переопределения get_form_class(), а

def get_form_class(self): 
    self.form_class = FORM[self.step] 
    return self.form_class 
+0

мне нужно, чтобы изменить свои имена классов и форм, но простая идея является отличным решением для меня –

Смежные вопросы