Apscheduler作业更新模型记录后未触发Django信号

oiopk7p5  于 2023-03-04  发布在  Go
关注(0)|答案(1)|浏览(167)

我有一个Apscheduler作业,它更新订阅模型中的active字段并将其设置为False。我创建了一个post_保存信号,该信号应该在订阅模型更新时触发,但它不起作用。以下是我的代码。
--job.py--

from django.conf import settings
from subscription.models import AccountSubscription
from django.utils import timezone

def schedule_api():
    try:
        data = {'is_active':False}
        AccountSubscription.objects.filter(expiry_date__lte=timezone.now(), is_active=True).update(**data)
    except Exception:
        pass

--信号。py--

@receiver(post_save, sender=AccountSubscription)
def post_save_user_subscription_expired(sender, instance, created, **kwargs):
    """Notifies users of subscription expiration."""
    try:
        if not created:
            if not instance.is_active:
                print("Notified users")
    except Exception as ex:
        print(ex)
        # context = {
        #     'status': 'error',
        #     'message': 'A subscription expiration notification error has occurred.'
        # }

        # raise exceptions.ParseError(context)

拜托,我是不是做错了什么?

kqlmhetl

kqlmhetl1#

update方法不调用保存方法,也不触发信号。原因Django直接进行SQL查询
记录如下:https://docs.djangoproject.com/en/4.1/ref/models/querysets/#update
解决方案是创建一个循环来直接更新每个示例,或者将通知业务逻辑移到一个函数中,并在更新查询之后调用它。

相关问题