django中的F()表达式一直给我0

时间:2018-05-19 20:14:15

标签: python django orm sql-update

我即将为我的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只是一个功能,可以对现有值进行搜索,然后返回srcumbled值并保存。

但是当然在这之前,我做了前两个例子,只是取出两个查询并进行测试以确保我做得对。但好像我不是吗? :(

提前感谢您提前获得任何帮助。

P.S。循环遍历每个查询集,如果可能的话,save()不是我想要的方式。

1 个答案:

答案 0 :(得分:1)

这有用吗?

querysets = Model.objects.filter(id__in[111, 123])
querysets.name = F('name') + ' testing'
querysets.save()