Поскольку вы копируете существующую запись, вы создаете новую Entry
, а не обновляете. Поэтому вы захотите создать подкласс CreateView
и использовать get_initial()
для копирования значений из существующего Entry
. Это даст вам заполненную форму, которую вы можете редактировать и сохранять. Затем при отправке вам нужно только переопределить form_valid()
, чтобы назначить entry_author
, как вы делали выше. Вы можете передать существующую запись pk с таким URL-адресом:
path('entries/<int:entry_id>/copy/', CopyView.as_view(), name='entry_copy'),
Затем в представлении:
class CopyView(LoginRequiredMixin, CreateView):
model = Entry
template_name = 'entries/create_entry.html'
fields = ['entry_title','entry_text', 'entry_input', 'entry_output']
def get_initial(self):
initial = super().get_initial()
existing_entry = Entry.objects.get(pk=self.kwargs['entry_id'])
initial['entry_title'] = existing_entry.entry_title
initial['entry_text'] = existing_entry.entry_text
initial['entry_input'] = existing_entry.entry_input
initial['entry_output'] = existing_entry.entry_output
return initial
def form_valid(self, form):
form.instance.entry_author = self.request.user
response = super().form_valid(form)
return response