mirror of
https://github.com/django/django.git
synced 2025-08-04 10:59:45 +00:00
Fixed #36389 -- Fixed GenericRelation.update() use write DB connection.
Signed-off-by: SaJH <wogur981208@gmail.com>
This commit is contained in:
parent
0b2ed4f7c8
commit
dc8ac83ae7
2 changed files with 33 additions and 2 deletions
|
@ -608,8 +608,11 @@ def create_generic_related_manager(superclass, rel):
|
|||
"""
|
||||
Filter the queryset for the instance this manager is bound to.
|
||||
"""
|
||||
db = self._db or router.db_for_read(self.model, instance=self.instance)
|
||||
return queryset.using(db).filter(**self.core_filters)
|
||||
queryset._add_hints(instance=self.instance)
|
||||
if self._db:
|
||||
queryset = queryset.using(self._db)
|
||||
queryset._defer_next_filter = True
|
||||
return queryset.filter(**self.core_filters)
|
||||
|
||||
def _remove_prefetched_objects(self):
|
||||
try:
|
||||
|
|
|
@ -2530,6 +2530,34 @@ class RouteForWriteTestCase(TestCase):
|
|||
self.assertEqual(e.model, Book)
|
||||
self.assertEqual(e.hints, {"instance": auth})
|
||||
|
||||
def test_generic_rel_update(self):
|
||||
book = Book.objects.create(
|
||||
title="Pro Django", published=datetime.date(2008, 12, 16)
|
||||
)
|
||||
Review.objects.create(source="Python Monthly", content_object=book)
|
||||
|
||||
with self.assertRaises(RouterUsed) as cm:
|
||||
with self.override_router():
|
||||
book.reviews.update(source="Python Daily")
|
||||
e = cm.exception
|
||||
self.assertEqual(e.mode, RouterUsed.WRITE)
|
||||
self.assertEqual(e.model, Review)
|
||||
self.assertEqual(e.hints, {"instance": book})
|
||||
|
||||
def test_generic_rel_delete(self):
|
||||
book = Book.objects.create(
|
||||
title="Pro Django", published=datetime.date(2008, 12, 16)
|
||||
)
|
||||
Review.objects.create(source="Python Monthly", content_object=book)
|
||||
|
||||
with self.assertRaises(RouterUsed) as cm:
|
||||
with self.override_router():
|
||||
book.reviews.all().delete()
|
||||
e = cm.exception
|
||||
self.assertEqual(e.mode, RouterUsed.WRITE)
|
||||
self.assertEqual(e.model, Review)
|
||||
self.assertEqual(e.hints, {"instance": book})
|
||||
|
||||
|
||||
class NoRelationRouter:
|
||||
"""Disallow all relations."""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue