Внедрих корекция за INNER JOIN за Django ORM, тя ще използва STRAIGHT_JOIN в случай на поръчка с INNER JOIN. Говорих с основните разработчици на Django и засега решихме да направим това като отделен бекенд. Така че можете да го проверите тук:https://pypi.python.org/pypi /django-mysql-fix
Има обаче едно друго решение. Използвайте фрагмент от отговора на Джеймс, но заменете select_related с:
qs = qs.select_related('').prefetch_related('wheel', 'dealer', 'category')
Той ще отмени INNER JOIN и ще използва 4 отделни заявки:1 за извличане на автомобили и 3 други с car_id
В (...).
АКТУАЛИЗИРАНЕ: Намерих още едно решение. След като посочите null=True във вашето поле ForeignKey, Django ще използва LEFT OUTER JOIN вместо INNER JOIN. LEFT OUTER JOIN работи без проблеми с производителността в този случай, но може да се сблъскате с други проблеми, за които все още не съм наясно.