Почему Django игнорирует порядок условий в filter()?
При фильтрации нескольких условий с помощью Django queryset filter(), порядок условий в filter() не гарантируется.
Особенно когда я фильтрую поля даты/времени, они фильтруются последними в предложении WHERE.
Эти два набора запросов генерируют один и тот же SQL с одним и тем же предложением WHERE.
dt = datetime(2022, 1, 1)
User.objects.filter(joined_at__lt=dt, is_active=True)
User.objects.filter(is_active=True, joined_at__lt=dt)
SELECT * FROM `user` WHERE (`user`.`is_active` = 1 AND `user`.`joined_at` < '2022-01-01 00:00:00')
Я знаю, что могу решить эту проблему с помощью цепочки фильтров.
Но мне интересно, почему Django игнорирует порядок условий в filter(). И по какому правилу Django определяет порядок в filter()?