【问题标题】:Formset Not Saving on UpdateView Django表单集不保存在 UpdateView Django
【发布时间】:2021-09-22 18:21:44
【问题描述】:

我在表单集上遇到问题,无法在 UpdateView 上保存。 这已经在几个 SO 帖子中讨论过,到目前为止我可以将它们总结为以下内容

  1. 确保传递一个实例。因此。 Reference

context['formset'] = journal_entry_formset(self.request.POST, instance=self.object)

  1. 覆盖 POST 方法。 ReferenceAnother One

我的 UpdateView 与我的 CreateView 完全相同,除了上面的两个更改。

这是我的 CreateView:

class JournalEntryUpdateView(UpdateView):
    model = JournalEntry
    template_name = 'add-journal-entry.html'
    success_url = reverse_lazy('index')
    form_class = JournalEntryForm

    def get_context_data(self, *args, **kwargs):
        context = super(JournalEntryUpdateView, self).get_context_data(*args, **kwargs)
        if self.request.POST:
            context['formset'] = journal_entry_formset(self.request.POST, instance=self.object)
        else:
            context['formset'] = journal_entry_formset(instance=self.object)
        return context

    def form_valid(self, form):
        context = self.get_context_data(form=form)
        formset = context['formset']
        if formset.is_valid():
            response = super().form_valid(form)
            formset.instance = self.object
            formset.save()
            return response
        else:
            return super().form_invalid(form)

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        formset = journal_entry_formset(self.request.POST, instance=self.object)
        print ("form:", form.is_valid() ) # True
        print ("formset:", formset.is_valid() ) # False
        print(formset.non_form_errors()) # No Entry
        print(formset.errors) # {'id': ['This field is required.']}
        
        if (form.is_valid() and formset.is_valid()):
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

当我点击提交时,页面只是刷新,没有任何反应。 (即我没有典型的黄色错误调试屏幕页面)。

我检查了数据库中的值,没有任何变化。

我确实有线索print(formset.errors) 行产生一个 {'id': ['This field is required.']}

这让我有点困惑,因为 AFAIK,ID(我假设是 PK)已经在 CreateView 中自动创建,所以我不需要在 UpdateView 中编辑它。

我也在 SO 中搜索它,但大多数答案都是针对像这样的 jinja 模板one

有没有办法解决这个问题?

【问题讨论】:

    标签: python django formset


    【解决方案1】:

    其实答案已经在最后一个链接(即神社模板)中了。 只需添加隐藏字段即可按预期工作。

                {% for form in formset %}
                    {% for hidden in form.hidden_fields %}
                        {{ hidden }}
                    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 2017-01-02
      • 2019-06-21
      • 2015-12-11
      • 1970-01-01
      相关资源
      最近更新 更多