【发布时间】:2019-01-04 13:27:08
【问题描述】:
我想要做的只是一个带有两个提交按钮的简单更新视图:即save,它只是保存更新;还有save-as 按钮,它当然会将更新后的表单的副本保存到数据库中,而原始数据不做编辑。
现在我知道如何在基于函数的视图中执行此操作,前提是我的 page_edit.html 有两个按钮:
<input type="submit" class="btn btn-danger" name = "save" value="Save changes">
<input type="submit" class="btn btn-success" name = "save_as" value="Save as new Page">
然后我的简化视图将是这样的:
def page_edit(request, pk):
if request.method == 'POST':
if 'save' in request.POST:
instance = Page.objects.get(pk=pk)
elif 'save_as' in request.POST:
instance = Page.objects.create()
p = PageForm(request.POST, request.FILES, instance=instance)
if p.is_valid():
"""write to db"""
p.clean()
p.save()
context = {'form': p, 'p_data_in': p.cleaned_data, 'p': p.instance}
return render(request, '/template/page_detail.html', context)
else:
instance = Page.objects.get(pk=pk)
p = PageForm(instance=instance)
context = {'form': p, 'p': p.instance}
return render(request, '/template/page_edit.html', context)
但是,我对使用基于类的视图导航有点困惑。
我尝试以这种方式使用 UpdateView:
class PageEdit(UpdateView):
model = Page
form_class = PageForm
template_name = '/template/page_edit.html'
def form_valid(self, form):
if 'save_as' in self.request.POST:
# current = self.get_context_data()
f = self.form_class(self.request.POST, self.request.FILES)
f.save()
return super(PageEdit, self).form_valid(form)
它确实将一个新实例保存到数据库中。但它也改变了当前的形式,据说是未经编辑的。
我觉得这应该很简单......但是,由于我是基于类的视图的新手,所以我很挣扎。
任何帮助将不胜感激。 谢谢:)
【问题讨论】:
标签: django django-views