gpt4 book ai didi

python - 在调用 Django 模型保存/删除后调用函数

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:47 24 4
gpt4 key购买 nike

我在 Django 中有很多模型类。它们都没有覆盖的 save() 或 delete() 函数。

我想创建一个类级装饰器,用于在调用 save()/delete() 后执行函数。这个类级别的装饰器应该是通用的,以便所有模型类都可以使用它。

我已经尝试过使用 post_save 和 post_delete 的信号,但是维护一个巨大的类列表可能是个问题。我也想避免重写 save()/delete()。

关于如何去做有什么建议吗?提前致谢。

最佳答案

您是否尝试过创建一个抽象 模型类并从中继承所有实际模型?通过这种方式,当您将 pre_save 信号附加到基类时,只要保存了任何子模型,就会发送该信号。

class SignaledModel(models.Model):
class Meta:
abstract = True

class Student(SignaledModel):
number = models.PositiveIntegerNumber(unique=True)
name = models.CharField(max_length=64)

class Course(SignaledModel):
code = models.CharField(unique=True)
teacher = models.CharField(max_length=64)

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=SignaledModel)
def model_post_save(sender, **kwargs):
print('Saved an instance with type: {}'.format(sender))

每当保存CourseStudent 实例时,都会调用model_post_save

希望这对您有所帮助。

关于python - 在调用 Django 模型保存/删除后调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31633211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com