2013-06-27 11 views
7

Nella documentazione di Django Wizard ho trovato il codice come questo:Django Wizard, molteplici forme in un passo

{{ wizard.management_form }} 
{% if wizard.form.forms %} 
    {{ wizard.form.management_form }} 
    {% for form in wizard.form.forms %} 
     {{ form }} 
    {% endfor %} 
{% else %} 
    {{ wizard.form }} 
{% endif %} 

Quindi mi chiedo come posso aggiungere più moduli per singolo passo della procedura guidata

+0

dopo aver passato ore su questo problema, ho finalmente trovato una soluzione apparente a : https://code.djangoproject.com/ticket/18830 ma non è un modo che mi soddisfa, perché non posso usare un ciclo come ho postato per ottenere i campi del modulo. Altre idee? – mdargacz

+1

il ciclo viene utilizzato in caso di un formset. Perché è necessario aggiungere più moduli in un solo passaggio comunque? – mariodev

+0

forse stai cercando formet https://docs.djangoproject.com/en/1.5/topics/forms/formsets/#django.forms.formsets.BaseFormSet – SaulTigh

risposta

3

Effettuare uno dei tuoi moduli uno Formset contenente il resto dei moduli necessari. Non è necessario utilizzare necessariamente uno ModelFormset, è possibile creare una sottoclasse della classe base e creare i moduli manualmente.

+0

Nessuna approvazione della risposta? – Joe

+0

Funziona solo se stai lavorando con più istanze dello stesso modulo, no? – Pieter

+0

No, funziona con qualsiasi combinazione di moduli. – patrys

0

Questo è disapprovato l'uso questo link: https://github.com/vikingco/django-formtools-addons

ho voluto condividere le mie impostazioni se sarebbe di aiuto a chiunque:

class BaseImageFormSet(BaseModelFormSet): 
    def __init__(self, *args, **kwargs): 
     super(BaseImageFormSet, self).__init__(*args, **kwargs) 
     self.queryset = Images.objects.none() 


ImageFormSets = modelformset_factory(Images, formset=BaseImageFormSet, fields=('picture',), extra=2) 

form_list = [("step1", CategoryForm), 
     ("step2", CityForm), 
     ("step3", (
      ('lastform', LastForm), 
      ('imageform', ImageFormSets) 
     )) 
     ] 

templates = {"step1": "create_post_category.html", 
      "step2": "create_post_city.html", 
      "step3": "create_post_final.html"} 




class OrderWizard(SessionMultipleFormWizardView): 
    file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'photos')) 


    def get_template_names(self): 
     return [templates[self.steps.current]] 


    def render(self, forms=None, **kwargs): 
     forms = forms or self.get_forms() 
     context = self.get_context_data(forms=forms, **kwargs) 

     #print(forms[1](queryset = Images.objects.none())) 
     return self.render_to_response(context) 

    def done(self, form_list, form_dict, **kwargs): 
     form_data_dict = self.get_all_cleaned_data() 
     #print(form_data_dict) 
     result = {} 
     instance = Post() 
     #print(form_dict) 
     for key in form_dict: 
      form_collection = form_dict[key] 
      #print(form_collection) 
      for key in form_collection: 
       form = form_collection[key] 
       print('printing form %s' % key) 
       #if isinstance(form, forms.ModelForm): 
       if key == 'lastform': 
        post_instance = form.save(commit=False) 

        nodes = form_data_dict.pop('nodes') 
        city = form_data_dict.pop('city') 
        post_instance.save() 

        post_instance.category.add(nodes) 
        post_instance.location.add(city) 
        print('lastfome as esu ') 

       if key == 'imageform': 
        for i in form_data_dict['formset-step3']: 
         picture = i.pop('picture') 
         images_instance = Images(post=post_instance, picture=picture) 
         images_instance.save() 







     return render_to_response('create_post_done.html', { 
      'form_data': result, 
      #'form_list': [form.cleaned_data for form in form_list], 

     }) 
Problemi correlati