【问题标题】:django formset not valid in edit modedjango formset 在编辑模式下无效
【发布时间】: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


    【解决方案1】:

    终于明白了!!

    经过长时间的调试和搜索,我发现了错误。 就像在这篇文章中 django formset not validating because ID is required 我必须将 {{ form.id }} 添加到我的模板循环中...... id 不会显示在 html 页面上,但不知何故在编辑模式下是必需的....

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

    【讨论】:

      猜你喜欢
      • 2020-12-07
      • 1970-01-01
      • 2017-06-09
      • 2020-02-29
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多