【问题标题】:django queryset able update own model's field with existing value + 1?django queryset 能够用现有值 + 1 更新自己模型的字段?
【发布时间】:2018-10-29 08:35:34
【问题描述】:

对不起,如果标题没有太多意义,我不知道如何用很少的词以正确的方式表达。

无论如何,我真正想要的是...我知道我们可以 filter querysets 然后使用 update 更新 queryset 中的所有字段,而无需执行循环然后 save()

但我在这里真正需要的是......

User.objects.filter().update(username=this is where I want to update BUT I want to update itself's username+1)

如果我以一种循环的方式来做,它会是这样的

all_users = User.objects.filter()
for user in all_users:
    user.username = user.username + str(1)
    user.save()

但是有没有办法使用update 并做到这一点?

提前感谢您的帮助。

【问题讨论】:

  • 你真的这样做是为了避免重复username吗?还有很多其他强大的方法可以实现这一目标
  • @Lemayzeur 不,我不是因为重复的username 用户名只是一个例子

标签: python django model save updates


【解决方案1】:

可以使用来自django.db.modelsF() 来做到这一点

from django.db.models import F
User.objects.filter(pk=pk).update(new_attr=F('username')+str(1))

all_users = User.objects.filter()
for user in all_users:
   user.username =  F('username') + str(1)
   user.save()

【讨论】:

  • 奇怪,我做了你在这里所做的事情......不知何故它将字段保存为 2。我正在做类似F('username')[:-1] 的事情,应该得到最后一个字符的权利吗?给我一个not found __getitem 的错误,如果我在你的例子中F('username') + str(1) 将 2 保存到我的数据库中
  • 怎么样?它保存 2 条记录,或者它为该字段分配一个值 2?
  • 分配的值是 2,这很奇怪,实际上我尝试了几次...而不是给 str(1) 我尝试了 'hello`,它也给了我 2 O.o
猜你喜欢
  • 2018-06-19
  • 2013-02-15
  • 1970-01-01
  • 2020-03-16
  • 2019-12-27
  • 1970-01-01
  • 2019-03-11
  • 2014-01-13
  • 1970-01-01
相关资源
最近更新 更多