mirror of
https://github.com/Hopiu/django-modeltranslation.git
synced 2026-05-09 22:04:48 +00:00
Don't set use_for_related_fields unconditionally on all managers (ref #242).
This commit is contained in:
parent
ee7c24641b
commit
5ed3a2696b
1 changed files with 14 additions and 8 deletions
|
|
@ -161,17 +161,22 @@ def add_manager(model):
|
|||
"""
|
||||
if model._meta.abstract:
|
||||
return
|
||||
|
||||
def patch_manager_class(manager):
|
||||
if isinstance(manager, MultilingualManager):
|
||||
return
|
||||
if manager.__class__ is Manager:
|
||||
manager.__class__ = MultilingualManager
|
||||
else:
|
||||
class NewMultilingualManager(MultilingualManager, manager.__class__):
|
||||
use_for_related_fields = getattr(
|
||||
manager.__class__, "use_for_related_fields", False)
|
||||
manager.__class__ = NewMultilingualManager
|
||||
|
||||
for _, attname, cls in model._meta.concrete_managers + model._meta.abstract_managers:
|
||||
current_manager = getattr(model, attname)
|
||||
if isinstance(current_manager, MultilingualManager):
|
||||
continue
|
||||
prev_class = current_manager.__class__
|
||||
if current_manager.__class__ is Manager:
|
||||
current_manager.__class__ = MultilingualManager
|
||||
else:
|
||||
class NewMultilingualManager(MultilingualManager, current_manager.__class__):
|
||||
pass
|
||||
current_manager.__class__ = NewMultilingualManager
|
||||
patch_manager_class(current_manager)
|
||||
if model._default_manager.__class__ is prev_class:
|
||||
# Normally model._default_manager is a reference to one of model's managers
|
||||
# (and would be patched by the way).
|
||||
|
|
@ -179,6 +184,7 @@ def add_manager(model):
|
|||
# model._default_manager is not the same instance as one of managers, but it
|
||||
# share the same class.
|
||||
model._default_manager.__class__ = current_manager.__class__
|
||||
patch_manager_class(model._base_manager)
|
||||
|
||||
|
||||
def patch_constructor(model):
|
||||
|
|
|
|||
Loading…
Reference in a new issue