Да, начиная с версии 3.0.0 Protocol Buffers (выпущено 28 июля 2016 г.), существует «Четко определенная кодировка в JSON как альтернатива двоичному прокодированию» , как упоминалось в примечаниях к выпуску
Хорошо, непроверено, потому что у меня нет ваших данных - как насчет этого:
Author.objects.filter(removed=False).select_related('image').filter(image__height=100).annotate(count_of_images=Count('image')).filter(count_of_images__lte=5)
Редактировать:
Это почти привело вас к этому. Проблема связана с внешним соединением ... Я думаю, что это последняя версия, которая должна сделать это за вас:
Author.objects.filter(removed=False).select_related('image').filter(Q(image__height=100) | Q(image__height__isnull=True)).annotate(count_of_images=Count('image')).filter(count_of_images__lte=5)
That Q (image__height = 100) | Q (image__height__isnull = True)
вот в чем трюк. Он получит либо авторов, у которых есть изображения высотой 100 , либо авторов, у которых высота изображения равна нулю (что означает, что у них нет связанных изображений)
PS. Спасибо за вопрос ... На самом деле это оказалось сложнее, чем я думал изначально, и я узнал несколько интересных приемов в процессе тестирования!
Ой ... Я действительно тестировал свое последнее решение с sqlite3. У меня нет экземпляра MySQL для тестирования ...: - (
Позвольте мне обдумать альтернативу.
Но - да - если он работает в sqlite, он должен работать в MySQL; Я бы сообщил об этом как об ошибке.
Насколько я могу судить, вы не используете значение счетчика, кроме как для фильтрации тех авторов, у которых оно больше 1. Если да, вы можете сделать это полностью в коде ORM с помощью простой запрос:
Author.objects.filter(removed=False, image__height__gte=100)