微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

django 表单集在编辑模式下无效

如何解决django 表单集在编辑模式下无效

我可以在 post 方法中保存表单集,但是当我尝试在我的“put”方法中编辑它时,我的 formset.is_valid 返回 false ... 我排除了此代码示例中的一些逻辑并将其替换为 .... 所以更容易阅读...

希望这是足够的信息来了解我的问题

我的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,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,'raum_formset': formset_raum}

    return render(request,'angebot/new_angebot.html',context)
    
    def put(self,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,'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 formset not validating because ID is required 我不得不将 {{ form.id }} 添加到我的模板循环中... id 不会显示在 html 页面上,但不知何故在编辑模式下需要....

感谢用户 J-a-n-u-s: 作为@unixo 答案的附录,简单地说: {{ form.id }}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。