【问题标题】:update field in model using the same field with the function update() django使用与函数 update() django 相同的字段更新模型中的字段
【发布时间】:2019-10-10 23:36:46
【问题描述】:

我有很多记录来更新一个字段,我必须使用 Django 的 ORM 已经附带的函数 .update() 来完成。我需要更新此字段,将字符串与同一字段的值连接起来。

我尝试过使用带有 F 表达式和值的注释。但它不起作用,因为在字段的注释中我似乎无法使用相同的字段。

这是我尝试做的:

Model.objects.all().annotate(image=Concat(Value("Path/"), F("image")))

我有下一个模型:

+------+-------+
| id   | image |
+------+-------+
|    1 | image1|
|    2 | image2|
|    3 | image3|

更新模型时,假设我想将字符串“Path/”与字段图像连接起来,应该是这样的

+------+------------+
| id   | image      |
+------+------------+
|    1 | Path/image1|
|    2 | Path/image2|
|    3 | Path/image3|

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您需要查看 Django 函数,例如 Concat:

    from django.db.models.functions import Concat
    Model.objects.update(image=Concat(Value('Path/'), F('image')))
    

    【讨论】:

    • 我已经在我的环境中对其进行了测试,它工作正常。我正在使用 Django 2.1。你用的是哪个版本的 Django?
    【解决方案2】:

    以下应该可以工作

    Model.objects.update(image=Value('Path/') + F('image'))
    

    F 提供对字段先前值的引用

    【讨论】:

    • 那行不通,因为“+”只对总和有效,Django 无法识别字段“+”之间的连接
    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多