我需要查询特定模型的一组对象,更改单个属性/列("account"),然后将整个查询集的对象保存为新对象/行。换句话说,我想复制这些对象,并在副本上更改单个属性("account")。我基本上是创建一个新帐户,然后通过每个模型和复制以前的帐户的对象到新帐户,所以我会重复这样做,与不同的模型,可能使用django shell。我该如何处理这个问题?它可以在查询集级别完成还是需要遍历所有对象?
。
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
From the docs:
如果对象的主键属性没有被设置,或者如果它被设置了但是a如果记录不存在,Django执行INSERT。
所以,如果你设置id
或pk
为None,它应该工作,但我已经看到了冲突的响应,这个解决方案在So:复制模型实例和他们的相关对象在Django/算法递归复制一个对象
这个解决方案应该工作(感谢@JoshSmeaton修复):
models = MyModel.objects.filter(account="acct_1")
for model in models:
model.id = None
model.account = "acct_2"
model.save()
我认为在我的情况下,我有一个OneToOneField
的模型,我正在测试,所以它是有道理的,我的测试不会与这个基本的解决方案。但是,我相信它应该工作,只要你照顾好OneToOneField的。