2017-02-03 4 views
0

ich eine Anwendung mit Django baute und bei der Verwendung von InlineFormSet mit ClassBasedViews meine route_formset in Vorlage leer ist, aber form wird mit Daten gefüllt, wie es sein sollte.Django: leer formset in Vorlage

Was mache ich falsch?

Ansicht

class ReservationUpdateView(UpdateView): 
    model = Reservation 
    form_class = ReservationForm 
    success_url = '/' 

    def get_form_kwargs(self): 
     kwargs = super(ReservationUpdateView, self).get_form_kwargs() 
     kwargs.update({'request': self.request}) 
     return kwargs 

    def get(self, request, *args, **kwargs): 
     """ 
     Handles GET requests and instantiates versions of the form 
     and its inline formsets. 
     """ 
     self.object = self.get_object() 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     route_formset = RouteFormSet() 
     return self.render_to_response(
      self.get_context_data(form=form, 
            route_formset=route_formset)) 

    def post(self, request, *args, **kwargs): 
     """ 
     Handles POST requests, instantiating a form instance and its inline 
     formsets with the passed POST variables and then checking them for 
     validity. 
     """ 
     self.object = self.get_object() 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     route_formset = RouteFormSet(self.request.POST) 
     if (form.is_valid() and route_formset.is_valid()): 
      return self.form_valid(form, route_formset) 
     else: 
      return self.form_invalid(form, route_formset) 

    def form_valid(self, form, route_formset): 
     """ 
     Called if all forms are valid. Creates a Recipe instance along with 
     associated Ingredients and Instructions and then redirects to a 
     success page. 
     """ 
     self.object = form.save() 
     route_formset.instance = self.object 
     route_formset.save() 
     return HttpResponseRedirect(self.get_success_url()) 

    def form_invalid(self, form, route_formset): 
     """ 
     Called if a form is invalid. Re-renders the context data with the 
     data-filled forms and errors. 
     """ 
     return self.render_to_response(
      self.get_context_data(form=form, 
            route_formset=route_formset)) 

Vorlage

{% for form in route_formset %} 
    <div class="form-group"> 
     <label class="col-sm-3 control-label">Time/Place</label> 
     <div class="col-sm-2"> 
      {{ form.time }} 
     </div> 
     <div class="col-sm-5"> 
      {{ form.place }} 
     </div> 
    </div> 
    {% endfor %} 

Formset

RouteFormSet = inlineformset_factory(Reservation, Stop, fields=('time','place'), extra=2) 

Ergebnis
enter image description here

So ist die formset mit Stops bevölkert werden soll, aber es ist leer ..

+0

Bitte fügen Sie die relevanten Teile Ihrer Vorlage und der Klasse def "RouteFormSet". – trixn

+0

@trixn aktualisierter Code – intelis

Antwort

1

Try formset mit Instanz initialisieren es mit verwandten Daten zu füllen:

route_formset = RouteFormSet(instance=self.object) 
+1

* facepalm *! Wie habe ich das vermisst! Danke – intelis

+0

@intelis Mach dir keine Sorgen, ich denke wir alle kennen dieses Gefühl :) – neverwalkaloner

Verwandte Themen