[英]Formset Not Saving on UpdateView Django
我在沒有保存在 UpdateView 上的表單集上遇到問題。 這已經在幾個 SO 帖子中討論過,到目前為止我可以將它們總結為以下
context['formset'] = journal_entry_formset(self.request.POST, instance=self.object)
我的 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 中編輯它。
我也搜索一下它的左右,但大部分的答案是這樣的神社模板一個
有沒有解決的辦法?
實際上,答案已經在最后一個鏈接(即jinja模板)中。 只需簡單地添加隱藏字段即可按預期工作。
{% for form in formset %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.