【发布时间】:2018-10-29 22:41:50
【问题描述】:
我即将为我的django 模型之一更新大约 2-3k 条记录。
我知道使用update() 会有所帮助,但是因为我实际上在该字段中使用了相同的值并将其更改为其他内容,例如具有对现有字段进行整理的功能。
我认为有一个名为 F() 的东西应该能够帮助我解决它,但不知何故,它一直将我的值作为 0 保存到字段中。
我没有收到任何错误,也不知道在哪里查看。
这是我阅读的教程 https://docs.djangoproject.com/en/1.8/ref/models/expressions/
这是我在真正对 2-3k 记录进行批量更新之前的示例代码
# I used the below, gives me 0 when I look at my db
querysets_of_model = Model.objects.filter(id__in[111, 123]).update(name=F('name') + ' testing')
# this gives me 0 too
querysets = Model.objects.filter(id__in[111,123])
querysets.update(name=F('name') + ' testing')
# without using the F(), which of course gives me `testing only` in the name field
qs = Model.objects.filter(id__in[111, 123]).update(name='testing only')
我本来想做的就是这样的
qys = Model.objects.filter().update(name=scrumble_fun(F('name')))
scrumble_fun 只是一个对现有值进行排序然后返回排序后的值并保存它的函数。
当然,在这样做之前,我作为前两个示例做了只是取出两个查询集并进行测试以确保我做对了。但好像我不是? :(
提前感谢您的任何帮助。
附:如果可能的话,循环遍历每个查询集然后 save() 不是我想要的方式。
【问题讨论】:
-
@T.Tokic 我想要的实际上是尝试取出原始值,在函数中对其进行处理,然后将其保存回原始字段。而不仅仅是
concating
标签: python django orm sql-update