Django - 我应该何时使用信号,何时应该覆盖保存方法?

Goc*_*cht 6 django django-signals django-models

我个人喜欢使用信号:

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)
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一些时间或任务更好地覆盖模型类中的save方法:

from django.db import models

class MyModel(models.Model):
    ...

    def save(self):
        ...
        super(MyModel, self).save()
Run Code Online (Sandbox Code Playgroud)

我问这个是因为save()在Django的Documentation页面中有一个覆盖方法(上面提供的链接)的例子,所以我不认为这是一个不好的做法.

我们pre_save()举个例子,文档说:

这是在模型的save()方法的开头发送的.

这是否意味着覆盖save对使用信号的性能具有相同的影响?

RA1*_*123 10

你不会发现任何性能差异.它们都不是黑客或"错误的"编码方法.这就是你喜欢它的方式.

如果在重写保存方法或从其他地方保存时获得循环导入,则可以使用信号.

我遵循一种模式,如果更改属于同一模型,则覆盖save方法,否则如果它们属于不链接到当前模型的不同模型(通过一对一或一对多),则使用信号.