gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:07:58 25 4
gpt4 key购买 nike

我想学习如何复制对象以及复制引用该对象的对象。

举个例子(已简化):模型 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)

我了解如何复制对象并更改 ID (=None)。但是我如何设法复制所有相关文件?

我得到的错误:异常值:get() 返回了多个文件 -- 它返回了 2 个!

最佳答案

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

其次,由于您将拥有一个查询集,因此您不能只执行 new_files.version_id = new_id。如果您的字段是外键,请尝试以下操作。如果是多对多,只需执行 new_version.file_set.add(new_files):

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)

关于django - django中的重复对象,也重复子对象(相关对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com