gpt4 book ai didi

python - 如何从 Django 查询集中创建新记录

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:46 25 4
gpt4 key购买 nike

我听说过某个地方的 django orm hack。是这样的

dp = SomeModel.objects.filter(type="customer").last()
dp.id = dp.id + 1 #changing id to a new one
dp.save()

假设所使用的 id 值不存在,最后一步应该会创建一条新记录。如果递增的 id 存在,则 save 方法的作用类似于 update 方法。例子::

dp.version += 1 #updating some random field
dp.save() # will change the newer version of dp.id

为了我们的利益,我想请教django的老手两个问题,

  1. 是否有可靠的方法可以使用最新的 auto_increment_pk 而不是 pk + 1 方法从旧记录创建新记录
  2. 上述方法是否更快或更好。我看到的一个优势是,如果我有一个包含 10 个字段的模型,并且我想从旧记录创建一条新记录,而旧记录只有 1 或 2 处更改,则此方法可以节省 8 行代码。

谢谢

最佳答案

last() 返回关于相应 QuerySet 排序的最后一个实例。不保证此实例具有正在使用的最大 pk。如果是这样,则无法保证在检索旧的最高 pk 和使用 pk + 1 提交新实例之间不会创建其他实例。这样的实例将被新的克隆覆盖。因此,不要手动设置新的 pk,而是让数据库处理它。正如其他人所建议的那样,通过将 pk 设置为 None 可以轻松完成:

instance.pk = None
instance.save()

关于python - 如何从 Django 查询集中创建新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com