阅读(3829) (0)

Django4.0 执行查询-将修改保存至对象

2022-03-14 13:53:09 更新

要将修改保存至数据库中已有的某个对象,使用 ​save()​。

有一个已被存入数据库中的 ​Blog​ 实例 ​b5​,本例将其改名,并在数据库中更新其记录:

>>> b5.name = 'New name'
>>> b5.save()

这在幕后执行了 ​UPDATE ​SQL 语句。Django 在你显示调用 save() 后才操作数据库。

保存 ForeignKey 和 ManyToManyField 字段

更新 ​ForeignKey ​字段的方式与保存普通字段的方式相同——只需将正确类型的实例分配给相关字段。本例为 ​Entry ​类的实例 ​entry ​更新了 ​blog ​属性,假设 ​Entry ​和 ​Blog ​的实例均已保存在数据库中(因此能在下面检索它们):

>>> from blog.models import Blog, Entry
>>> entry = Entry.objects.get(pk=1)
>>> cheese_blog = Blog.objects.get(name="Cheddar Talk")
>>> entry.blog = cheese_blog
>>> entry.save()

更新 ​ManyToManyField字段有点不同——在字段上使用 ​add()​ 方法为关联关系添加一条记录。本例将 ​Author ​实例 ​joe ​添加至 ​entry ​对象:

>>> from blog.models import Author
>>> joe = Author.objects.create(name="Joe")
>>> entry.authors.add(joe)

要一次添加多行记录至 ​ManyToManyField ​字段,在一次调用 ​add()​ 时传入多个参数,像这样:

>>> john = Author.objects.create(name="John")
>>> paul = Author.objects.create(name="Paul")
>>> george = Author.objects.create(name="George")
>>> ringo = Author.objects.create(name="Ringo")
>>> entry.authors.add(john, paul, george, ringo)

Django 会在添加或指定错误类型的对象时报错。