У меня есть представления на основе классов для моих моделей. Я хочу создать полную копию объекта и go для его редактирования. Я хотел бы сделать это из UpdateView со специальной кнопкой для копирования, но это хороший вариант из списка объектов. Как я могу это сделать? Ниже приведен код для одной из моделей.
Мой CreateView:
class CreateDealView(
CustomSuccessMessageDeal,
CustomPermissionRequired,
CreateView
):
model = Deal
template_name = 'db_visual/create_deal.html'
form_class = DealForm
permission_required = (
'db_visual.add_deal',
)
success_message = "Сделка %(pk)s успешно создана!"
def get_success_url(self):
url_kwargs = {'deal_id': self.object.id}
url_name = 'update_deal'
return reverse_lazy(url_name, kwargs=url_kwargs)
Мой UpdateView:
class UpdateDealView(
CustomSuccessMessageDeal,
CustomPermissionRequired,
UpdateView
):
model = Deal
pk_url_kwarg = 'deal_id'
template_name = 'db_visual/update_deal.html'
form_class = DealForm
success_message = "Сделка <a href='%(url)s'>%(id)s</a> " \
"успешно изменена!"
def get_success_url(self):
url_name = 'deals'
return reverse_lazy(url_name)
def get_success_message(self, cleaned_data):
return self.success_message % dict(
cleaned_data,
id=self.object.id,
url=reverse_lazy(
'update_deal',
kwargs={
'deal_id': self.object.id,
}
),
)
UPD: я написал представление для создания копии с помощью идентификатор, но когда я пытаюсь перенаправить на UpdateView, я получаю сообщение об ошибке:
Мой взгляд:
def copy_deal(request, deal_id):
new_deal = Deal.objects.get(pk=deal_id)
new_deal.pk = None
new_deal.save()
return reverse_lazy(
'update_deal',
kwargs={'deal_id': new_deal.pk}
)
Что не так с моим реверс?