何时激活/调用Django中的“post_save”信号?

2024-04-24 05:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在保存一个特定的模型后,我必须更新一些数据库表。我使用了@receiver(post_save修饰符。但是在这个decorator函数中,值仍然没有保存在数据库中。我有一对多的关系,但是当我得到使用kwargs['instance']保存的当前实例时,它没有子对象。但是在我从shell检查时保存之后,它确实有子对象。以下是我使用的代码:

@receiver(post_save, sender=Test)
def do_something(sender, **kwargs):
    test = kwargs['instance']
    users = User.objects.filter(tags__in=test.tags.values_list('id',flat=True))
    for user in users:
        other_model = OtherModel(user=user, test=test, is_new=True)
        other_model.save()

Tags: 对象instanceintest数据库truesavetags
2条回答

保存父实例时调用父实例的post_save。如果在此之后添加子级,则在调用父级post_save时它们将不存在。在

post_save在结束时发送Model.save_基(),它本身被称为模型.保存((). 这意味着,如果重写模型的save()方法,则在调用super(YourModel,self).save(*args,**kw)时发送post_save。在

如果Tag在Test上有一个ForeignKey,并且测试实例是刚刚创建的,那么在这个阶段您不能期望有任何与您的测试实例相关的标记实例,因为标记实例显然需要首先知道测试实例的pk,这样才能保存它们。在

相关问题 更多 >