Как заменить подстроку строкой в django, вложенной в JSONField?

Если у меня есть модель:

class MyModel(Model):
    properties = JSONField()

У меня есть случаи, когда properties выглядят следующим образом:

{"a": {"b": ["some text A"]}}
{"a": {"b": ["some other text A"]}}
{"a": {"b": ["some text A"]}}

Как мне обновить эти экземпляры модели, заменив строку "A" на "B"? Я предполагаю, что это будет что-то вроде этого:

MyModel.objects.update(
    properties=Func(
        F("properties"),
        Value("{a,b,0}"),
        Cast(
            Replace(Cast(F("a__b__0"), CharField()), Value("A"), Value("B")),
            JSONField(),
        ),
        function="jsonb_set",
    )
)

Однако это не совсем работает. Я думаю, что мне просто не хватает правильной ссылки на поле (F("a__b__0") недействительна).

Вернуться на верх