То, что я хочу сделать, - это просто просмотр обновлений с двумя кнопками отправки: 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)
Сохраняет новый экземпляр в базе данных. Но это также меняет текущую форму, которая предположительно оставлена неотредактированной.
У меня такое ощущение, что все должно быть просто ... но, поскольку я новичок в представлении на основе классов, я довольно борюсь.
Любая помощь будет высоко ценится.
Спасибо:)