django model中的save()方法

Model.save(force_insert=Falseforce_update=Falseusing=DEFAULT_DB_ALIASupdate_fields=None)

id和pk

如果一个model里没有显示声明哪一个字段(field)是主键(即在某个字段里声明primary_key=True),则django会自动生成一个名为id的AutoFields作为主键。model里的主键都有一个别名叫做pk(primary_key的缩写),无论这个主键是自动生成的还是我们指定的。使用pk和使用主键的名字是一样的效果。

注意1:对于一个要新加入数据库的model实例,在save()执行之前是无法知道它的id的,因为要算数据库中已有多少个本model才能算出它的id值。

>>> b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
>>> b2.id     # Returns None, because b doesn't have an ID yet.
>>> b2.save()
>>> b2.id     # Returns the ID of your new object.

force_update和force_insert

这两个参数一般较少用到,因为save()之后django执行的是UPDATE或者INSERT这两条SQL语句的哪一条,遵循如下算法:

1.如果这个对象已经有主键而且主键的值是True的(即不是None或者空字符串等),就执行UPDATE。

2.如果没有主键或者这条save()不会update任何字段,那么它就INSERT。

只有在某些特定情况下,需要强制save()执行INSERT或UPDATE时才会使force_update=True或force_insert=True(比如我要求能UPDATE就UPDATE,不能我也不取INSERT,那么我就把这个force_update参数设置为True)。

update_fields

用来指定哪些字段需要更新,别的不更新。默认是None,这样所有字段都会更新一遍。有时候字段很多而我们只需要更新很少的字段,可以用这个参数来提高一下效率。注意要给它的是一个可迭代对象(比如list等)。如果给它一个空的可迭代对象,那么就什么都不更新(注意和None不同,如果等于None是更新全部字段)。

一旦update_fields参数不使用默认值None,那么这条save()语句就是强制执行UPDATE的。

product.name = 'Name changed again'
product.save(update_fields=['name'])

 

转载于:https://www.cnblogs.com/zywscq/p/5397439.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django ,重写模型的 `save` 方法可以实现在保存模型实例时自定义一些行为。对于一对多关系,你可以在子模型重写 `save` 方法来实现一些自定义的行为。 以下是一个重写 `save` 方法的示例,其一个 `Author` 模型有一个一对多关系的子模型 `Book`: ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) def __str__(self): return self.title def save(self, *args, **kwargs): # 在保存 Book 实例之前执行某些操作 self.title = self.title.upper() super(Book, self).save(*args, **kwargs) # 在保存 Book 实例之后执行某些操作 print('Book instance saved') ``` 在上面的示例,我们在 `Book` 模型重写了 `save` 方法,将 `title` 属性转换为大写并保存。当你在视图创建 `Book` 实例并保存时,Django 将会自动调用我们重写的 `save` 方法: ```python from django.shortcuts import render from .models import Author, Book def my_view(request): author = Author.objects.create(name='John Doe') book = Book.objects.create(title='The Catcher in the Rye', author=author) return render(request, 'my_template.html', {'book': book}) ``` 当你执行上面的代码时,Django 将会在保存 `book` 实例时自动调用 `save` 方法,并执行我们定义的自定义行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值