我需要为特定模型查询一组对象,更改单个属性/列(“帐户”),然后将整个查询集的对象保存为新对象/行。换句话说,我想复制对象,并在重复项上更改单个属性(“帐户”)。我基本上是在创建一个新帐户,然后遍历每个模型并将以前帐户的对象复制到新帐户,因此我将使用不同的模型重复执行此操作,可能使用 django shell。我应该如何处理这个问题?可以在查询集级别完成还是需要遍历所有对象?
IE。,
MyModel.objects.filter(account="acct_1")
# Now I need to set account = "acct_2" for the entire queryset,
# and save as new rows in the database
最佳答案
来自 docs :
If the object’s primary key attribute is not set, or if it’s set but a record doesn’t exist, Django executes an INSERT.
所以如果你设置
id
或 pk
到 None 它应该工作,但我在 SO 上看到了对此解决方案的相互矛盾的回应:Duplicating model instances and their related objects in Django / Algorithm for recusrively duplicating an object此解决方案应该有效(感谢@JoshSmeaton 的修复):
models = MyModel.objects.filter(account="acct_1")
for model in models:
model.id = None
model.account = "acct_2"
model.save()
我想就我而言,我有一个
OneToOneField
在我正在测试的模型上,所以我的测试不适用于这个基本解决方案是有道理的。但是,我相信它应该有效,只要您照顾好 OneToOneField。
关于django - 如何修改查询集并将其另存为新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16149871/