Как игнорировать триггер внутри другого триггера с помощью django-pgtrigger

Я обновляю tbla."field_2" из триггера в tblb. За исключением того, что tbla."field_2" защищен триггером pgtrigger.ReadOnly.

Это работает без триггера pgtrigger.ReadOnly в TblA. Как мне сделать это и сохранить триггер pgtrigger.ReadOnly в TblA.field_2?

Model TblA(models.Model):
    field_1 = models.CharField(max_length=20)
    field_2 = models.PositiveIntegerField(default=0)

    class Meta:
        triggers = [
            pgtrigger.ReadOnly(
                name='read_only_field_2',
                fields=['field_2']
            )
        ]
class TblB(models.Model):
    field_a = models.ForeignKey(TblA, on_delete=models.SET_NULL)

    class Meta:
        pgtrigger.Trigger(
                func=pgtrigger.Func('''
                    IF (NEW."{columns[field_a]}" IS NOT NULL) THEN
                        UPDATE "tbla"
                            SET "tbla"."field_2" = "tbla"."field_2" + 1
                        WHERE
                            "tbla"."id" = NEW.{columns[field_a]}
                    END IF;
                    RETURN NEW;
                    ''')
                ),
                when=pgtrigger.Before,
                operation=pgtrigger.Insert,
                name='increment_tbla_field_2'
            ),

Я думал имитировать функциональность pgtrigger.ignore() внутри триггера с помощью set_config, однако я не очень хорошо знаю, насколько устойчив set_config. Нужно ли мне очищать его в конце триггера? Можно ли это сделать?

set_config('pgtrigger.ignore', '{myapp:pgtrigger_read_only_field_2_c8215,pgtrigger_read_only_field_2_c8215}', true)
Вернуться на верх