我们什么时候应该使用save()的高级参数?

nal*_*zok 3 sql database django model django-models

通常我们只用 将实例保存到数据库中inst.save(),但 Djangouser.save(using=self._db)其源代码中使用。此外,它user.save(update_fields=['last_login']) 在别处使用.

这让我有些困惑。为了使事情更糟的是,对于该文件save()的方法非常简单的:

Model.save(force_insert=False, force_update=False, using=DEFAULT_DB_ALIAS, update_fields=None)[来源]

如果您想要自定义保存行为,您可以覆盖此save() 方法。有关更多详细信息,请参阅覆盖预定义的模型方法

模型保存过程也有一些微妙之处;请参阅以下部分。

它甚至不包含这些参数的解释!

我的问题是:我怎么知道什么时候应该使用 的高级参数save()?如果我要实现自定义模型,我肯定会写user.save().

我自己做了几次实验,比如更改user.save(using=self._db)user.save(),没有任何问题,但我不想有一天感到惊讶。另外,由于某些原因必须传递参数,对吗?

e4c*_*4c5 5

答案是你会知道什么时候需要:) 现在采用这种做法

类 MyModel(models.Model):

def save(self,*args, **kwargs):
   # do whatever
   super(MyModel,self).save(*args,**kwarags)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以确保不会意外丢失任何那些神秘的参数。但让我们尝试揭开其中一些的神秘面纱。

使用=self._db

这是为了方便在单个 django 应用程序中使用多个数据库。大多数应用程序并不真正需要。

更新字段

如果 save() 在关键字参数 update_fields 中传递了一个字段名称列表,则只会更新该列表中命名的字段。如果您只想更新对象上的一个或几个字段,这可能是可取的。阻止所有模型字段在数据库中更新会带来轻微的性能优势

https://docs.djangoproject.com/en/1.11/ref/models/instances/

因此,源代码的链接是他们使用此功能的特定实例。在不更新整个记录的情况下跟踪用户最后一次登录的时间非常有用。

force_insert 与 force_update

这些告诉 django 尝试强制执行一个或另一个操作。在https://docs.djangoproject.com/en/1.11/ref/models/instances/ 中也有一定程度的解释