使用Django信号的替代方法有哪些?

时间:2019-02-10 21:37:03

标签: django signals

我正在一个项目中,我需要根据字段是否更改来重新计算值。这是一个示例:

Model1:
    field_a = DatetimeField()

    calculated_field_1 = ForeignKey(Model2)

Model2:
    field_j = DatetimeField()

如果field_a在model1上发生更改,则我必须重新计算字段calculated_field_1的值,以查看它是否也需要更改。完成的计算需要我查询数据库以检查其他模型的值,然后确定所计算字段的值是否需要更改。

示例)field_a发生变化,那么我将不得不执行此计算

result = Model2.objects.filter(field_j__gte=Model1.field_a)
If result.exists():
    Model1.field_a = result.first()
Model1.save(update_fields=(‘field_a’,))

这是我能想到的最基本的示例,查询要比这复杂得多。

当字段更改时,该项目以一个计算开始,所以我决定最好的方法是使用Django信号。几个月后,该项目的需求发生了变化,现在我还必须执行其他一些计算,这些计算与上面的示例非常相似。我注意到我的post_save函数失控了,我只是想知道使用信号有什么替代方法。尽管我现在进行的post_save计算远远少于半秒,但出于我的问题,我假设它们花了一秒或更长时间。

当我从数据库中提取它们时,有效答案不能包括即时进行这些计算。我们使用一个验证框架,该框架要求我在模型上设置这些值,而即时查询是我们尝试的一种方法,但是由于性能原因,它是不可行的。另外,在字段更改时,要求之一是用户需要查看计算字段的结果,因此必须同步进行。

使用此模式有哪些替代方法?

0 个答案:

没有答案