使用 django 模型实例更新项目

Posted

技术标签:

【中文标题】使用 django 模型实例更新项目【英文标题】:Update an item using a django model instance 【发布时间】: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()

【问题讨论】:

【参考方案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(...) 构造函数中指定的所有字段都可以在将记录保存回数据库之前进行更改。

以上是关于使用 django 模型实例更新项目的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 更新模型实例

如何在Django中使用DeleteView显示相关项目?

django项目模型字段

带有自定义用户模型加载夹具错误的 Django 项目

如何更新 django 模型实例的多个字段?

如何更新 django 模型实例的多个字段?