В фильтре наборов запросов django как проверить, имеет ли хотя бы один ключ в поле json непустое значение? - PullRequest
0 голосов
/ 20 мая 2018
class Library(models.model):
    book = JSONField(default=[], blank=True, null=True)

Возможная структура 'book': {'title': '', 'no_of_pages': '', 'author_name': '', 'color': '', edition: ''}

Я пытаюсь написать запрос django, который возвращает только те записи, в которых в книге есть хотя бы один ключ с непустым значением (т. Е. Либо title , либо no_of_pages или author_name или цвет или издание имеет какое-то значение)

одно из возможных решений этого типа что-то вроде:

Author.objects.filter(
    ~Q(book__title='') |
    ~Q(book__no_of_pages='') | 
    ~Q(book__author_name='') |
    ~Q(book__color='') |
    ~Q(book__edition='')
)

есть ли лучшеспособ сделать это?Может случиться так, что в будущем книга может иметь несколько дополнительных ключей, например publisher или available

Как выполнить этот фильтр, не упоминая конкретные ключиполе (просто проверьте хотя бы один ключ с некоторым значением)?или любой более короткий метод, чтобы написать этот запрос со всеми упомянутыми ключами?

1 Ответ

0 голосов
/ 20 мая 2018
Author.objects.filter(book__has_any_keys=['title', 'no_of_pages', 'author_name', 'color'])

попробуйте, как указано в документации , если это работает для вас.

...