【问题标题】:how to make one field value be equal to another field value in the same table by using django orm?如何使用django orm使一个字段值等于同一张表中的另一个字段值?
【发布时间】:2014-11-25 06:09:28
【问题描述】:

在mysql中,sql表达式如下:

udpate table set one_field=another_field

那么如何使用 django orm 让它成功呢?例如:

在模型A中,有3个字段:id、a_value 在模型B中,有3个字段:id、b_value 现在我希望 b_value 的值等于 a_value 加上 b_value。表达式应该是这样的:b_value = b_value + a_value。但是 django orm 中的 F() 不能用于不同的模型。如何在更少的代码中使用 django orm 来做到这一点。 顺便说一下,我的数据有点大,大概2000k左右。

【问题讨论】:

    标签: django orm


    【解决方案1】:

    对于原始问题:

    for obj in Model_Name.objects.all():
        obj.one_field = obj.another_field
        obj.save()
    

    如果您有一个大型数据库,您可以使用批量更新。 https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once

    希望对你有帮助

    【讨论】:

    • 谢谢。我认为F是我想要的。我的数据非常大。
    • 但在文档中,它说:如果您尝试使用 F() 对象引入连接,则会引发 FieldError。当我更新我的字段时,它使用其他表的字段值。还有其他更好的方法来解决这个问题吗?谢谢。
    • 基本上,使用 F(),您只能更新一个 django 模型中的那些字段。只要“one_field”和“another_field”都在同一个模型中,F() 就可以工作。但是,如果您尝试根据“Model_2”中“another_field”的值更新“Model_1”中的“one_field”,那么 F() 将不起作用,因为它不支持连接。那么你可能有使用我在答案中建议的方法。
    • 嗨,我更新了我的问题。使用for obj in Model_Name.objects.all(): obj.one_field = obj.another_field obj.save()这段代码,不利于大数据,会导致内存down。
    • 我建议您使用我建议的方法。我找不到足够的时间来做更多的研究。有时间会帮你的
    猜你喜欢
    • 2018-11-11
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多