Как заменить подстроку строкой в 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")
недействительна).