diff options
| author | Damian Posener <750763+deains@users.noreply.github.com> | 2022-02-07 15:06:25 +0000 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-02-09 13:31:49 +0100 |
| commit | 09e499a39eec9342cb594bfd27939cfd1046f797 (patch) | |
| tree | e7203ae3fed67802c159db6d1725971a17c8b654 | |
| parent | 2d472ad05c7fb2a5fe405be46af2062cdb5eaeee (diff) | |
Fixed #33501 -- Made order_with_respect_to respect database routers.
| -rw-r--r-- | django/db/models/base.py | 3 | ||||
| -rw-r--r-- | 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]) |
