【发布时间】:2021-05-06 18:12:21
【问题描述】:
我可以在 post 方法中保存一个 formset,但是当我尝试在我的“put”方法中编辑它时,我的 formset.is_valid 返回 false ... 我在此代码示例中排除了一些逻辑,并将其替换为 .... 所以更容易阅读...
希望这是足够的信息来了解我的问题
我的观点.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 模板:
{{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 %}
一直在搜索,但无法正常工作??
将不胜感激任何帮助!!!
【问题讨论】:
标签: django forms django-class-based-views formset