Вы можете запросить 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')
Так в чем же разница? И если я могу делать простые запросы, зачем мне аннотировать? Если, конечно, я не буду делать сложные запросы.