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)
So ist die formset mit Stops
bevölkert werden soll, aber es ist leer ..
Bitte fügen Sie die relevanten Teile Ihrer Vorlage und der Klasse def "RouteFormSet". – trixn
@trixn aktualisierter Code – intelis