Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django使用基于类的createview克隆模型对象_Django_Django Views_Clone - Fatal编程技术网

Django使用基于类的createview克隆模型对象

Django使用基于类的createview克隆模型对象,django,django-views,clone,Django,Django Views,Clone,我想准备一个新对象,但要等待用户输入来创建它: 我已将get\u form添加到此视图: class MyCreateView(CreateView): def get_form(self, form_class): form = super(MyCreateManView, self).get_form(form_class) if self.kwargs['ref']: new_item = get_object_or_404

我想准备一个新对象,但要等待用户输入来创建它:

我已将
get\u form
添加到此视图:

class MyCreateView(CreateView):

    def get_form(self, form_class):
        form = super(MyCreateManView, self).get_form(form_class)
        if self.kwargs['ref']:
            new_item = get_object_or_404(models.MyModel, pk = self.kwargs['ref'])
            new_item.pk = None 
            new_item.note = "Copia di " + new_item.note 
            form =  MyForm(instance = new_item)

    def form_valid(self, form):
        ...
在该方法中,我读取GET参数'ref'并使用该数据预编译表单字段

但是当我提交数据时,不会执行
form\u valid
方法,也不会创建新对象

form  =  MyForm(instance = new_item)
您没有将表单绑定到任何数据。这意味着该表单将永远无效

我会尝试覆盖
get\u form\u kwargs

def get_form_kwargs(self):
    kwargs = super(MyCreateView, self).get_form_kwargs()
    if self.kwargs['ref']:
        new_item = get_object_or_404(models.MyModel, pk = self.kwargs['ref'])
        ...
        kwargs['instance'] = new_item
    return kwargs

标记的答案不可能是正确的,因为我测试了它,它将覆盖您现有的对象

改为使用以下内容(在Django 2.17上测试)


def get_form_kwargs(自我):
kwargs=super()
旧项目=获取对象或404(教程,pk=self.kwargs['pk'])
新项目=深度复制(旧项目)
new_item.id=无
kwargs['instance']=深度复制(新项目)
返回kwargs

如果form.is_有效():form=form.save();上下文={“形式”:形式,};返回呈现(请求“app/template.html”,上下文)
它是基于类的视图还是普通视图?如果它不是基于类的视图,那么
super(MyCreateManView,self)。form\u valid(form)
没有多大意义。你有没有从别的地方得到这段代码,然后零零碎碎地复制?