mirror of
https://github.com/Hopiu/django-modeltranslation.git
synced 2026-05-13 23:53:09 +00:00
commit
8f48464ace
4 changed files with 48 additions and 1 deletions
|
|
@ -313,6 +313,30 @@ class CustomManager2TestModel(models.Model):
|
|||
objects = CustomManager2()
|
||||
|
||||
|
||||
class CustomManagerAbstract(models.Manager):
|
||||
pass
|
||||
|
||||
|
||||
class CustomManagerBaseModel(models.Model):
|
||||
needs_translation = models.BooleanField(default=False)
|
||||
|
||||
objects = models.Manager() # ensures objects is the default manager
|
||||
translations = CustomManagerAbstract()
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class CustomManagerChildTestModel(CustomManagerBaseModel):
|
||||
title = models.CharField(ugettext_lazy('title'), max_length=255)
|
||||
|
||||
objects = CustomManager2()
|
||||
|
||||
|
||||
class PlainChildTestModel(CustomManagerBaseModel):
|
||||
title = models.CharField(ugettext_lazy('title'), max_length=255)
|
||||
|
||||
|
||||
# ######### Required fields testing
|
||||
|
||||
class RequiredModel(models.Model):
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ from django.apps import apps as django_apps
|
|||
|
||||
from modeltranslation import admin, settings as mt_settings, translator
|
||||
from modeltranslation.forms import TranslationModelForm
|
||||
from modeltranslation.manager import MultilingualManager
|
||||
from modeltranslation.models import autodiscover
|
||||
from modeltranslation.tests.test_settings import TEST_SETTINGS
|
||||
from modeltranslation.utils import (build_css_class, build_localized_fieldname,
|
||||
|
|
@ -39,7 +40,7 @@ models = translation = None
|
|||
request = None
|
||||
|
||||
# How many models are registered for tests.
|
||||
TEST_MODELS = 31 + (1 if MIGRATIONS else 0)
|
||||
TEST_MODELS = 33 + (1 if MIGRATIONS else 0)
|
||||
|
||||
|
||||
class reload_override_settings(override_settings):
|
||||
|
|
@ -2730,6 +2731,20 @@ class TestManager(ModeltranslationTestBase):
|
|||
manager = models.CustomManagerTestModel.another_mgr_name
|
||||
self.assertTrue(isinstance(manager, MultilingualManager))
|
||||
|
||||
def test_default_manager_for_inherited_models_with_custom_manager(self):
|
||||
"""Test if default manager is still set from local managers"""
|
||||
manager = models.CustomManagerChildTestModel._meta.default_manager
|
||||
self.assertEqual('objects', manager.name)
|
||||
self.assertTrue(isinstance(manager, MultilingualManager))
|
||||
self.assertTrue(isinstance(
|
||||
models.CustomManagerChildTestModel.translations,
|
||||
MultilingualManager))
|
||||
|
||||
def test_default_manager_for_inherited_models(self):
|
||||
manager = models.PlainChildTestModel._meta.default_manager
|
||||
self.assertEqual('objects', manager.name)
|
||||
self.assertTrue(isinstance(models.PlainChildTestModel.translations, MultilingualManager))
|
||||
|
||||
def test_custom_manager2(self):
|
||||
"""Test if user-defined queryset is still working"""
|
||||
from modeltranslation.manager import MultilingualManager, MultilingualQuerySet
|
||||
|
|
|
|||
|
|
@ -137,6 +137,8 @@ class ManagerTestModelTranslationOptions(TranslationOptions):
|
|||
@register([
|
||||
models.CustomManagerTestModel,
|
||||
models.CustomManager2TestModel,
|
||||
models.CustomManagerChildTestModel,
|
||||
models.PlainChildTestModel
|
||||
])
|
||||
class CustomManagerTestModelTranslationOptions(TranslationOptions):
|
||||
fields = ('title',)
|
||||
|
|
|
|||
|
|
@ -203,11 +203,17 @@ def add_manager(model):
|
|||
if model._meta.abstract:
|
||||
return
|
||||
# Make all managers local for this model to fix patching parent model managers
|
||||
added = set(model._meta.managers) - set(model._meta.local_managers)
|
||||
model._meta.local_managers = model._meta.managers
|
||||
|
||||
for current_manager in model._meta.local_managers:
|
||||
prev_class = current_manager.__class__
|
||||
patch_manager_class(current_manager)
|
||||
if current_manager in added:
|
||||
# Since default_manager is fetched by order of creation, any manager
|
||||
# moved from parent class to child class needs to receive a new creation_counter
|
||||
# in order to be ordered after the original local managers
|
||||
current_manager._set_creation_counter()
|
||||
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).
|
||||
|
|
|
|||
Loading…
Reference in a new issue