我想在Django中创建一个可以放在我的模型上的定制decorator ,它会用我的业务逻辑创建一个信号.每个信号的逻辑都是相同的,唯一变化的是它所连接的模型.我很难理解如何做到这一点.
给定一个模型,例如:
class Post(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
理想情况下,我希望与我的装饰师一起将其添加到我的模型上,例如:
@custom_signal_decorator()
class Post(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
它会产生一个这样的信号:
@receiver(post_save, sender=sender)
def notify_created(sender, instance, created, **kwargs):
channel_layer = channels.layers.get_channel_layer()
group_name = f'notifications_{instance.company.id}'
async_to_sync(channel_layer.group_send)(
group_name,
{
"type": "notify_change",
}
)
最终目标是通过在创建新帖子时向前端发送通知来实时跟踪更改.当手动 for each 模型创建一个信号时,这一切都有效,但我觉得装饰者会更有意义,把我们想要跟踪的模型放在上面.
我将如何实现它的任何类型的输入都将是有帮助的,或者是另一种您认为可能在不使用decorator 的情况下工作得很好的方式.谢谢.
我试着自己创建一个定制的decorator ,但我不知道如何动态地将模型发送到decorator 内部,以便它跟踪该模型,这主要是我不理解它如何工作的地方.