Django: используя выражения F () в JSONField? - PullRequest
2 голосов
/ 06 апреля 2019

У меня есть модель

class Product(Model):
    properties = JSONField()

При запросе

Product.objects.values('properties__color')

я получаю правильный результат

SELECT product.properties-> colorИЗ продукта

Однако, когда я делаю то, что мне казалось эквивалентным

Product.objects.values(color=F('properties__color'))

, выполняемый запрос совершенно другой

SELECTproduct.properties AS color FROM product

Это ошибка в JSONField от django, или я неправильно понял F() выражений?

1 Ответ

0 голосов
/ 06 апреля 2019

Вы можете использовать простой values('fieldname__lookup'), потому что values() поддерживает поиски, так как v2.1: выражения

Product.objects.values('properties__color')

F, однако не поддерживают поиски;на самом деле они молча отбрасывают их, о чем свидетельствует ваш пример.

При использовании преобразований JSONField обратите внимание на ошибку , когда искомое поле вложено более чем в одноуровень глубоко.В связанном вопросе вы также найдете решение для использования именованной аннотации, если простого values() недостаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...