Я создал такую модель:
class Customer(models.Model):
name = models.CharField(max_length=200)
data = JSONField()
и данные имеют такую структуру:
Customer.objects.create(name='David', data={
fields: [
{id: 1, value: "abc"},
{id: 2, value: "efg}
]
})
Если мы фильтруем объекты с точным data.fields.item, мы можем сделать так:
Customer.obejcts.filter(data__fields__contains=[{id: 1, value: "abc"}])
Если мы хотим фильтровать объекты с data.fields.item, но не с точным data.fields.item.value следующим образом, как мы можем это сделать? Большое спасибо!
Customer.obejcts.filter(data__fields__contains=[{id: 1, value: "b"}])
Для raw sql в PostgreSQL, возможно, мы можем сделать следующее:
SELECT id, json_string(fields,'value') FROM table_name
WHERE json_string(fields,'value') LIKE '%b%';
И попробуйте следующее утверждение django, но оно не работает:
queryset = Customer.objects\
.annotate(fieldValue=KeyTextTransform('value', 'fields'))\
.filter(fieldValue__contains='b')