【问题标题】:Update an item using a django model instance使用 django 模型实例更新项目
【发布时间】:2022-01-04 15:58:54
【问题描述】:

如果项目和实例之间不同的字段未知,通过保存具有相同 id 的模型实例来更新项目是否是个好主意?

假设数据库中有一个Person 项目:

id: 4
name: Foo
surename: Bar
tel: 0000000000

更新该项目是否是个好主意:

p = Person(
    name='Foo'
    surename='Bar'
    tel='0000000111'
)

old_p = Person.objects.get(name='Foo', surname='Bar')
p.id = old_p.id

p.save()

【问题讨论】:

    标签: python django database


    【解决方案1】:

    通过保存具有相同 id 的模型实例来更新项目是否是个好主意?

    。如果您的Person 模型有其他字段,则需要将所有这些字段复制到新记录p 中。否则,这些可能会更新为Person 模型具有的默认值,或者更新为您传递给p = Person(…) 调用的错误值。这使得代码难以维护:每次向模型添加新字段时,都需要更新更新单个字段的所有代码片段。

    如果您想更新单个字段,可以使用.update(…) call [Django-doc]

    Person.objects.filter(name='Foo', surname='Bar')<strong>.update(tel='0000000111')</strong>

    或者,如果您想运行触发器并使用该模型的 .save(…) 方法,您可以检索对象并更新该特定字段,因此:

    p = Person.objects.get(name='Foo', surname='Bar')
    p.tel = '0000000111'
    p.save()

    【讨论】:

    • 感谢您的回答。在我的情况下,要更新的字段每次都不同且未知。我已经更新了我的问题。
    • @Charalamm:但您可以简单地更改多个字段并将实例保存回来。因此,您在 Person(...) 构造函数中指定的所有字段都可以在将记录保存回数据库之前进行更改。
    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2016-02-15
    • 2019-08-17
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多