【问题标题】:Django concat F function with character带有字符的Django concat F函数
【发布时间】:2019-03-25 14:24:04
【问题描述】:

我有一个具有group_id CharField 的模型。此字段应等于对象的 pk 并带有“#”前缀。

我正在尝试以这种方式更新数据库。

MyModel.objects.update(group_id=f'#{F("pk")}')

但这不起作用。实际上,它为所有对象设置了'#F(pk)' 字符串。

我可以用F函数做这个操作吗?

【问题讨论】:

    标签: django python-3.6 django-orm django-database


    【解决方案1】:

    你使用Concat [Django-doc]函数:

    from django.db.models import F, Value
    from django.db.models.functions import Concat
    
    MyModel.objects.update(group_id=Concat(Value('#'), F('pk')))

    这将生成一个如下所示的查询:

    UPDATE app_mymodel
    SET group_id = CONCAT_WS('', '#', app_mymodel.pk)
    

    (在本地我得到了这个查询,但它可能取决于后端等)

    这里的_WS表示“带分隔符”,但由于分隔符是空的,与“简单”的concat相比没有区别。

    请注意,这里的group_id 当然应该有一个类型(可能CharField 可以接受使用此表达式生成的值)。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 2018-02-02
      • 2015-12-14
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 2021-10-20
      相关资源
      最近更新 更多