我需要查询的特定型号的一组对象,改变单一的属性/列(“账户”),然后整个查询集的对象保存为新的对象/行。 换句话说,我要复制的对象,与单个属性(“账户”)改变了重复的。 我基本上创建一个新帐户,然后通过每个模型去和复制以前的帐户的对象到新的帐户,所以我会反复这样做,有不同的型号,可能使用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
从文档 :
如果对象的主键属性未设置,或者如果它的设置但是记录不存在,Django的执行INSERT命令。
所以,如果你设定的id
或pk
为无它应该工作,但我已经看到了矛盾的反应,此解决方案对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年代。