2013-06-27 20 views
7

W dokumentacji Django kreatora znalazłem kodu:Django Wizard wielu formularzy w jednym kroku

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

Więc zastanawiam się jak mogę dodać wiele form do pojedynczego kroku kreatora

+0

po spędzeniu godzin w tej sprawie, w końcu znalazłem rozwiązanie, które wydaje się być : https://code.djangoproject.com/ticket/18830, ale nie jest to sposób, który mnie satysfakcjonuje, ponieważ nie mogę użyć pętli, którą opublikowałem, aby uzyskać pola formularza. Jakieś inne pomysły? – mdargacz

+1

Pętla jest używana w przypadku formform. Dlaczego mimo to trzeba dodawać wiele formularzy w jednym kroku? – mariodev

+0

Może szukasz zestawów formularzy https://docs.djangoproject.com/en/1.5/topics/forms/formsets/#django.forms.formsets.BaseFormSet – SaulTigh

Odpowiedz

3

Wykonaj jedno z twoich formularzy Formset zawierające pozostałe potrzebne formularze. Nie musisz koniecznie używać ModelFormset, możesz podklasować klasę podstawową i tworzyć formularze ręcznie.

+0

Brak akceptacji odpowiedzi? – Joe

+0

Działa to tylko wtedy, gdy pracujesz z wieloma wystąpieniami tego samego formularza, nie? – Pieter

+0

Nie, działa z dowolną kombinacją formularzy. – patrys

0

ten obecnie nie zaleca się użyć tego linku: https://github.com/vikingco/django-formtools-addons

Chciałem podzielić moje ustawienia, jeśli byłyby dla nikogo pomocne:

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], 

     }) 
Powiązane problemy