【问题标题】:Сreate a full copy of the object from UpdateView or from ListView in Django在 Django 中,从 UpdateView 或 ListView 创建对象的完整副本
【发布时间】:2020-04-20 09:03:03
【问题描述】:

我的模型有基于类的视图。我想创建对象的完整副本并去编辑它。我想从 UpdateView 中使用一个特殊的复制按钮来执行此操作,但它是对象列表中的一个不错的选择。我怎样才能做到这一点?下面是其中一种模型的代码。

我的创建视图:

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)

我的更新视图:

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:我为通过 id 创建副本编写了一个视图,但是当我尝试重定向到 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}
    )

我的反向有什么问题?

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    我变了

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 2016-08-08
      • 2020-03-03
      相关资源
      最近更新 更多