我之前就如何处理 Django 模型上的 post_save 事件做出了一些错误的决定,目前我正在考虑改变我的方法。
让我们首先举个例子。这是我的模型。
class MyModel(models.Model):
#... all my model creation and logic are here
def do_something(self):
# Actually do something, for the sake of simplifying the example, just write pass
pass
现在,我使用的是像这样的接收器函数。它有效,但由于我的许多原因,我想在这种情况下停止使用信号。
@receiver(post_save, sender=MyModel)
def foo(sender, instance, created, **kwargs):
if created:
instance.do_something()
我想我可以重写
MyModel.save
方法,如下所示:
class MyModel(models.Model):
#...
def save(self):
super().save()
if created: # It is this line that I need to figure how to do.
self.do_something()
如果我想重写
if created:
方法,我应该用什么替换接收器函数的 save()
?或者还有什么可以推荐的吗?
我也很好奇
pre_save
信号是否也是一样。
如果我理解你的问题,你可以尝试检查当前模型实例 pk 是否可用
def save(self, *args, **kwargs):
is_created = self.pk is None # Check if the instance is being created
super().save(*args, **kwargs)
if is_created:
self.do_something()