Ho un FormWizard in cui ho bisogno di dati dal primo modulo per passare al costruttore del secondo modulo in modo da poter creare un modulo dinamico.Come passare i dati del modulo precedente al costruttore di un DynamicForm in FormWizard
È possibile ottenere i dati del primo modulo tramite process_step di FormWizard.
Creo i campi del secondo modulo con una chiamata al database dell'elenco di campi.
class ConditionWizardDynamicQuestions(forms.Form):
def __init__(self, DynamicQuestions=None, *args, **kwargs):
super(ConditionWizardDynamicQuestions, self).__init__(*args, **kwargs)
questions = Question.objects.filter(MYDATA = DATA_FROM_1STFORM)
for q in questions:
dynField = FieldFactory(q)
self.fields[q.label] = dynField
Come posso passare sopra il DATA_FROM_1STFORM?
mio codice risultante: ho abbandonato il init della forma, e acceso agli CreateQuestions def. Quindi ha utilizzato la sovrascrittura get_form della procedura guidata per modificare la forma dopo la creazione.
class ConditionWizard(SessionFormWizard):
def get_form(self, request, storage, step=None, data=None, files=None):
form = super(ConditionWizard, self).get_form(request, storage, step, data, files)
stepIndex = self.get_step_index(request, storage, step)
if stepIndex == 1:
form.CreateQuestions(request.session["WizardConditionId"])
if stepIndex == 3:
form.fields['hiddenConditionId'].initial = request.session["WizardConditionId"]
form.fields['medicationName'].queryset = Medication.objects.filter(condition = request.session["WizardConditionId"])
return form
Sto incontrando un problema nel passaggio dei dati dal passaggio 1 al passaggio 3, ma la soluzione è utile e intuitiva. – BozoJoe
Che tipo di problema stai incontrando? AFAIK dovrebbe consentire di accedere a tutti i dati di tutti i moduli precedenti, ovvero il passaggio 3 dovrebbe avere i dati del passaggio 1 e del passaggio 2. –
il mio problema era che stavo tentando di utilizzare l'iniziale dalla procedura guidata e sovrascrivere il modulo __dentro__. Sono passato a utilizzare get_form e il mondo è diventato più chiaro per me :) – BozoJoe