Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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中的复制对象,也复制子对象(相关对象)_Django_Django Models - Fatal编程技术网

django中的复制对象,也复制子对象(相关对象)

django中的复制对象,也复制子对象(相关对象),django,django-models,Django,Django Models,我想学习如何复制对象,但也要复制引用该对象的对象 例如(简化): 型号1:版本 身份证 名字 模型2:文件 身份证 文件名 文件内容 外键指向版本 关系:一个版本可以有多个文件 因此,一个软件版本可以有多个文件。 我想复制一个完整的版本。 目前我有以下几点: def duplicate_version(request,id, MAC_address): new_version = Version.objects.get(pk=id) new_version.pk = No

我想学习如何复制对象,但也要复制引用该对象的对象

例如(简化): 型号1:版本

  • 身份证
  • 名字
模型2:文件

  • 身份证
  • 文件名
  • 文件内容
  • 外键指向版本
关系:一个版本可以有多个文件

因此,一个软件版本可以有多个文件。 我想复制一个完整的版本。 目前我有以下几点:

def duplicate_version(request,id, MAC_address):
    new_version = Version.objects.get(pk=id)
    new_version.pk = None
    new_version.save()

    new_files = File.objects.get(version_id=id)  <-- here I get the error
    new_id = new_version.id
    new_files.version_id = new_id
    new_files.save()
    return get_all_versions(request, MAC_address)
def复制版本(请求、id、MAC地址):
new_version=version.objects.get(pk=id)
new_version.pk=无
新的_版本。保存()

new_files=File.objects.get(version_id=id)首先您可能应该阅读。
get()
方法只返回一个对象。您需要的是
filter()
方法来获取查询集

第二,由于您将有一个查询集,您不能只执行
新建文件。version\u id=new\u id
。如果您的字段是外键,请尝试以下操作。如果是多对多,只需执行
new\u version.file\u set.add(new\u files)


首先,你可能应该阅读。
get()
方法只返回一个对象。您需要的是
filter()
方法来获取查询集

第二,由于您将有一个查询集,您不能只执行
新建文件。version\u id=new\u id
。如果您的字段是外键,请尝试以下操作。如果是多对多,只需执行
new\u version.file\u set.add(new\u files)


然后使用我发布的代码中的更新方法。@Mehdi B好的,谢谢。我添加了“new_files.save()”,假设它仍然需要?queryset没有保存方法,请使用我发布的示例代码。如果使用update(),则不需要save()。同样,save用于单个对象,如get()。代码更改了新文件的外键。但它不会复制它们,然后使用我发布的代码中的更新方法。@Mehdi B好的,谢谢。我添加了“new_files.save()”,假设它仍然需要?queryset没有保存方法,请使用我发布的示例代码。如果使用update(),则不需要save()。同样,save用于单个对象,如get()。代码更改了新文件的外键。但它不会复制它们
def duplicate_version(request,id, MAC_address):
    new_version = Version.objects.get(pk=id)
    new_version.pk = None
    new_version = new_version.save()
    new_files = File.objects.filter(version_id=id)
    new_files.update(version_id=new_version.id)
    return get_all_versions(request, MAC_address)
def duplicate_version(request, pk, MAC_address):
    new_version = Version.objects.get(pk=pk)
    new_version.pk = None
    new_version.modification_date = datetime.datetime.now()
    new_version.save()

    new_files = File.objects.filter(version_id=pk)
    for file in new_files:
        file.version_id = new_version.pk
        file.pk = None
        file.save()
    return get_all_versions(request, MAC_address)