如何修改查询集并将其保存为新对象?(How to modify a queryset and sav

2019-08-31 18:43发布

我需要查询的特定型号的一组对象,改变单一的属性/列(“账户”),然后整个查询集的对象保存为新的对象/行。 换句话说,我要复制的对象,与单个属性(“账户”)改变了重复的。 我基本上创建一个新帐户,然后通过每个模型去和复制以前的帐户的对象到新的帐户,所以我会反复这样做,有不同的型号,可能使用Django的壳。 我应该如何看待呢? 它可以在查询集级别上进行或者我通过所有的对象都需要循环?

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

Answer 1:

从文档 :

如果对象的主键属性未设置,或者如果它的设置但是记录不存在,Django的执行INSERT命令。

所以,如果你设定的idpk为无它应该工作,但我已经看到了矛盾的反应,此解决方案对SO: 复制模型实例,并在Django /算法及其相关对象进行recusrively复制对象

这个解决方案应该工作(感谢@JoshSmeaton的修正):

models = MyModel.objects.filter(account="acct_1")
for model in models:
  model.id = None
  model.account = "acct_2"
  model.save()

我想在我的情况,我有一个OneToOneField对我测试的模型,这是有道理的,我的测试将不能与这Basic解决方案。 但是,我认为它应该工作,只要你照顾OneToOneField年代。



文章来源: How to modify a queryset and save it as new objects?