Tôi đã triển khai bản sửa lỗi cho INNER JOIN cho Django ORM, nó sẽ sử dụng STRAIGHT_JOIN trong trường hợp đặt hàng bằng INNER JOIN. Tôi đã nói chuyện với các nhà phát triển lõi Django và chúng tôi quyết định làm điều này như một phần phụ trợ riêng biệt ngay bây giờ. Vì vậy, bạn có thể xem tại đây: https://pypi.python.org/pypi / django-mysql-fix
Tuy nhiên, có một cách giải quyết khác. Sử dụng một đoạn trích từ câu trả lời của James, nhưng thay select_inity bằng:
qs = qs.select_related('').prefetch_related('wheel', 'dealer', 'category')
Nó sẽ hủy INNER JOIN và sử dụng 4 truy vấn riêng biệt:1 để tìm nạp ô tô và 3 truy vấn khác với car_id
VÀO (...).
CẬP NHẬT: Tôi đã tìm thấy một giải pháp khác. Sau khi bạn chỉ định null =True trong trường ForeignKey của mình, Django sẽ sử dụng LEFT OUTER JOIN thay vì INNER JOIN. LEFT OUTER JOIN hoạt động mà không có vấn đề về hiệu suất trong trường hợp này, nhưng bạn có thể gặp phải các vấn đề khác mà tôi chưa biết.