【发布时间】:2016-06-27 06:15:58
【问题描述】:
我个人喜欢使用signals:
from django.db import models
from django.db.models.signals import pre_save
class MyModel(models.Model):
...
def custom_action_before_saving(sender, instance, *args, **kwargs):
...
pre_save.connect(custom_action_before_saving, sender=MyModel)
但我想知道在模型类中是否有一些时间或任务更好override the save method:
from django.db import models
class MyModel(models.Model):
...
def save(self):
...
super(MyModel, self).save()
我问这个是因为在 Django 的文档页面中有一个覆盖 save() 方法(上面提供的链接)的示例,所以我认为这不是一个坏习惯。
我们以pre_save() 为例,文档说:
这是在模型的 save() 方法开始时发送的。
这是否意味着覆盖 save 对性能的影响与使用信号相同?
【问题讨论】:
-
信号可能更混乱,需要考虑重复信号,docs.djangoproject.com/en/1.9/topics/signals/…,当你可能不想和其他变幻莫测时加载固定装置(如果你喜欢的话)触发信号......
-
@luke_aus 与在某些情况下使用
if self....:覆盖 save 以避免代码执行不同吗? -
@Gocht save() 方法不会被固定装置的加载触发。
-
@luke_aus 说得好,批量方法触发信号?
标签: django django-models django-signals