From 09e499a39eec9342cb594bfd27939cfd1046f797 Mon Sep 17 00:00:00 2001 From: Damian Posener <750763+deains@users.noreply.github.com> Date: Mon, 7 Feb 2022 15:06:25 +0000 Subject: [PATCH] Fixed #33501 -- Made order_with_respect_to respect database routers. --- django/db/models/base.py | 3 --- tests/order_with_respect_to/base_tests.py | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/django/db/models/base.py b/django/db/models/base.py index cf3f25319d..76beda4d84 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -17,7 +17,6 @@ from django.core.exceptions import ( ValidationError, ) from django.db import ( - DEFAULT_DB_ALIAS, DJANGO_VERSION_PICKLE_KEY, DatabaseError, connection, @@ -2370,8 +2369,6 @@ class Model(metaclass=ModelBase): def method_set_order(self, ordered_obj, id_list, using=None): - if using is None: - using = DEFAULT_DB_ALIAS order_wrt = ordered_obj._meta.order_with_respect_to filter_args = order_wrt.get_forward_related_filter(self) ordered_obj.objects.db_manager(using).filter(**filter_args).bulk_update( diff --git a/tests/order_with_respect_to/base_tests.py b/tests/order_with_respect_to/base_tests.py index 0767d5080f..c895074e42 100644 --- a/tests/order_with_respect_to/base_tests.py +++ b/tests/order_with_respect_to/base_tests.py @@ -6,6 +6,8 @@ from operator import attrgetter class BaseOrderWithRespectToTests: + databases = {"default", "other"} + # Hook to allow subclasses to run these tests with alternate models. Answer = None Post = None @@ -108,3 +110,15 @@ class BaseOrderWithRespectToTests: a1.delete() new_answer = self.Answer.objects.create(text="Black", question=q1) self.assertSequenceEqual(q1.answer_set.all(), [a2, a4, new_answer]) + + def test_database_routing(self): + class WriteToOtherRouter: + def db_for_write(self, model, **hints): + return "other" + + with self.settings(DATABASE_ROUTERS=[WriteToOtherRouter()]): + with self.assertNumQueries(0, using="default"), self.assertNumQueries( + 1, + using="other", + ): + self.q1.set_answer_order([3, 1, 2, 4])