Jag har implementerat en fix för INNER JOIN för Django ORM, den kommer att använda STRAIGHT_JOIN vid beställning med INNER JOINs. Jag pratade med Django core-devs och vi bestämde oss för att göra detta som en separat backend tills vidare. Så du kan kolla in det här:https://pypi.python.org/pypi /django-mysql-fix
Det finns dock en annan lösning. Använd ett utdrag från James svar, men ersätt select_related med:
qs = qs.select_related('').prefetch_related('wheel', 'dealer', 'category')
Det kommer att avbryta INNER JOIN och använda 4 separata frågor:1 för att hämta bilar och 3 andra med car_id
IN (...).
UPPDATERING: Jag har hittat ytterligare en lösning. När du anger null=True i ditt ForeignKey-fält kommer Django att använda LEFT OUTER JOINs istället för INNER JOIN. LEFT OUTER JOIN fungerar utan prestandaproblem i det här fallet, men du kan stöta på andra problem som jag inte är medveten om än.