2016-03-12 3 views
0

Я использую Django formtools для создания многоэтапных форм. Проблема в том, что я понятия не имею, как передать уникальный идентификатор экземпляру формы. Например:Django formtools и переменная экземпляра для экземпляра формы

  1. Пользователь переходит к шагу 1 - т.е. запускает мастер с самого начала. Создается уникальный случайный идентификатор.
  2. ID можно получить на всех этапах, и он останется постоянным до завершения().
  3. Если пользователь переходит к шагу 1, идентификатор останется постоянным.
  4. Если пользователь начинает форму с самого начала (очистка всех предыдущих данных), будет создан новый идентификатор.

Но как это можно сделать? Нет init использовать. initial_dict, с другой стороны, останется постоянным во всех экземплярах формы, а точка 4 не будет выполнена.

Любые идеи, как это решить?

+0

вы смотрели на 'get_context_data' функции? Вы можете использовать его для проверки шага, и если какое-то требование выполняется, вы можете создать новый идентификатор. Вы можете использовать его в комбинации функции get_form_initial для создания идентификатора при инициализации мастера. – Ali

+0

Да, я использовал их оба. Проблема в том, что я понятия не имею, где на самом деле установить новый идентификатор? Я не нашел функцию, которая вызывается, прежде чем перейти к шагу 1 и где я могу хранить переменные экземпляра. get_form_initial() вызывается на каждом шаге. – Paapaa

ответ

0

Может быть, попробовать что-то вроде этого:

class MyWizardView(SessionWizardView): 
    unique_id == "" 

    def get(self, request, *args, **kwargs): 
     """ 
     This method handles GET requests. 

     If a GET request reaches this point, the wizard assumes that the user 
     just starts at the first step or wants to restart the process. 
     The data of the wizard will be resetted before rendering the first step 
     """ 
     self.storage.reset() 

     # reset the current step to the first step. 
     self.storage.current_step = self.steps.first 
     unique_id = # Insert ID generator here # 
     return self.render(self.get_form()) 
Смежные вопросы