如何修改查询集并将其保存为新对象



我需要查询特定模型的一组对象,更改单个属性/列("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。

所以,如果你设置idpk为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的。

相关内容

  • 没有找到相关文章

最新更新