Вы можете запросить JSONField в Django, либо с помощью прямого поиска, либо с помощью аннотаций.Теперь я понимаю, что если вы аннотируете поле, вы можете выполнять всевозможные сложные запросы, но для самого базового запроса, какой из них на самом деле является предпочтительным методом?
Пример: допустим, у меня есть модель, подобная
class Document(models.Model):
data = JSONField()
И затем я сохраняю объект, используя следующую команду:
>>> Document.objects.create(data={'name': 'Foo', 'age': 24})
Теперь запрос, который я хочу, является самым основным: Найти все документы, где data__name
равно 'Foo'
.Я могу сделать это двумя способами, один с использованием аннотации, а другой без, вот так:
>>> from django.db.models.expressions import RawSQL
>>> Document.objects.filter(data__name='Foo')
>>> Document.objects.annotate(name = RawSQL("(data->>'name')::text", [])).filter(name='Foo')
Так в чем же разница?И если я могу делать базовые запросы, зачем мне аннотировать?При условии, конечно, я не собираюсь делать сложные запросы.