i can save a formset in post method, but when i try to edit it in my "put" method, my formset.is_valid returns false ... i excluded some logic in this code samples and replaced it with .... so it is easier to read...
hope this is enough information to get an idea of my problem
my view.py
class AngebotView(View):
def get(self, request, id=None):
if id: # edit view
.................
raum_formset = RaumFormSet(queryset=objekt.t_raum_set.all())
raum_formset.extra = 0 #set extra to 0, otherwise there is always a additional form in the edit view
template = 'angebot/edit_angebot.html'
else: # create view
.....................
# Create an instance of the formset
raum_formset = RaumFormSet(queryset=T_Raum.objects.none())
template = 'angebot/new_angebot.html'
context = {'kunde_form': kunde_form, 'angebot_form': angebot_form,
'objekt_form': objekt_form, 'raum_formset': raum_formset}
return render(request, template, context)
def post(self, request, id=None): # Post = save/edit
context = {}
if id:
return self.put(request, id) #when id then PUT = EDIT
........
formset_raum = RaumFormSet(data=self.request.POST)
# wenn die Eingabe der Formen passt
if formset_raum.is_valid():
..................
raum_instances = formset_raum.save(commit=False)
for new_raum in raum_instances:
new_raum.objektid = new_objekt #set foreign key
new_raum.save()
messages.success(request, 'Angebot wurde gespeichert!')
return HttpResponseRedirect(reverse('angebot:angebot_details', kwargs={'id': new_angebot.id}))
else:
# TODO: Errorhandling
raise Http404
context = {'angebot_form': angebot_form, 'kunde_form': kunde_form,
'objekt_form': objekt_form, 'raum_formset': formset_raum}
return render(request, 'angebot/new_angebot.html', context)
def put(self, request, id=None): # save the edit
context = {}
.................
formset_raum = RaumFormSet(data=self.request.POST)
if formset_raum.is_valid(): #this is not working !!!!
raum_instances = formset_raum.save(commit=False)
for new_raum in raum_instances:
new_raum.objektid = new_objekt # set foreign key
new_raum.save()
messages.success(request, 'Angebot wurde erfolgreich geƤndert!')
return HttpResponseRedirect(reverse('angebot:angebot_details', kwargs={'id': new_angebot.id}))
else:
messages.warning(request, 'Eingabe -- Invalid')
context = {'angebot_form': angebot_form, 'kunde_form': kunde_form,
'objekt_form': objekt_form, 'raum_formset': formset_raum}
return render(request, 'angebot/edit_angebot.html', context)
forms.py
RaumFormSet = modelformset_factory(
T_Raum, fields=("name", "hoehe", 'flaeche', 'anzfenster', 'anzaussenflaechen', 'alternative', 'anzS', 'anzM', 'anzL', 'anzManuellUeberschrieben'), extra=1
)
edit_angebot.html template:
{{raum_formset.management_form}}
{% for raum in raum_formset %}
<tr id="rowToClone">
<td> {{ raum.name }} </td>
<td> {{ raum.hoehe }} </td>
<td> {{ raum.flaeche }} </td>
<td> {{ raum.anzfenster }} </td>
<td> {{ raum.anzaussenflaechen }} </td>
<td> {{ raum.alternative }} </td>
</tr>
{% endfor %}
been searchin a while but cant get it working ??
would appreciate any help !!!