Создать полную копию объекта из UpdateView или из ListView в Django - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть представления на основе классов для моих моделей. Я хочу создать полную копию объекта и 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, я получаю сообщение об ошибке:

enter image description here

Мой взгляд:

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}
    )

Что не так с моим реверс?

1 Ответ

0 голосов
/ 22 апреля 2020

Я изменил

return reverse_lazy( 'update_deal', kwargs={'deal_id': new_deal.pk} ) на

return HttpResponseRedirect(reverse( 'update_deal', kwargs={'deal_id': new_deal.pk} ))

...