diff --git a/modeltranslation/fields.py b/modeltranslation/fields.py index 7172eb4..9ded57b 100644 --- a/modeltranslation/fields.py +++ b/modeltranslation/fields.py @@ -182,8 +182,8 @@ class TranslationField(object): self.related_query_name = lambda: loc_related_query_name self.remote_field.related_name = build_localized_fieldname(current, self.language) self.remote_field.field = self # Django 1.6 - if hasattr(self.remote_field.to._meta, '_related_objects_cache'): - del self.remote_field.to._meta._related_objects_cache + if hasattr(self.remote_field.model._meta, '_related_objects_cache'): + del self.remote_field.model._meta._related_objects_cache # Django 1.5 changed definition of __hash__ for fields to be fine with hash requirements. # It spoiled our machinery, since TranslationField has the same creation_counter as its diff --git a/modeltranslation/tests/models.py b/modeltranslation/tests/models.py index 67ee24b..a965f92 100644 --- a/modeltranslation/tests/models.py +++ b/modeltranslation/tests/models.py @@ -60,19 +60,31 @@ class NonTranslated(models.Model): class ForeignKeyModel(models.Model): title = models.CharField(ugettext_lazy('title'), max_length=255) - test = models.ForeignKey(TestModel, null=True, related_name="test_fks") - optional = models.ForeignKey(TestModel, blank=True, null=True) - hidden = models.ForeignKey(TestModel, blank=True, null=True, related_name="+") - non = models.ForeignKey(NonTranslated, blank=True, null=True, related_name="test_fks") - untrans = models.ForeignKey(TestModel, blank=True, null=True, related_name="test_fks_un") + test = models.ForeignKey( + TestModel, null=True, related_name="test_fks", on_delete=models.CASCADE, + ) + optional = models.ForeignKey(TestModel, blank=True, null=True, on_delete=models.CASCADE) + hidden = models.ForeignKey( + TestModel, blank=True, null=True, related_name="+", on_delete=models.CASCADE, + ) + non = models.ForeignKey( + NonTranslated, blank=True, null=True, related_name="test_fks", on_delete=models.CASCADE, + ) + untrans = models.ForeignKey( + TestModel, blank=True, null=True, related_name="test_fks_un", on_delete=models.CASCADE, + ) class OneToOneFieldModel(models.Model): title = models.CharField(ugettext_lazy('title'), max_length=255) - test = models.OneToOneField(TestModel, null=True, related_name="test_o2o") - optional = models.OneToOneField(TestModel, blank=True, null=True) + test = models.OneToOneField( + TestModel, null=True, related_name="test_o2o", on_delete=models.CASCADE, + ) + optional = models.OneToOneField(TestModel, blank=True, null=True, on_delete=models.CASCADE) # No hidden option for OneToOne - non = models.OneToOneField(NonTranslated, blank=True, null=True, related_name="test_o2o") + non = models.OneToOneField( + NonTranslated, blank=True, null=True, related_name="test_o2o", on_delete=models.CASCADE, + ) # ######### Custom fields testing diff --git a/modeltranslation/tests/tests.py b/modeltranslation/tests/tests.py index 13e11ca..f94b78b 100644 --- a/modeltranslation/tests/tests.py +++ b/modeltranslation/tests/tests.py @@ -989,9 +989,12 @@ class ForeignKeyFieldsTest(ModeltranslationTestBase): trans_real.activate("de") test_inst2 = models.TestModel(title_en='title_en', title_de='title_de') test_inst2.save() - test_inst2.test_fks = [fk_inst_de, fk_inst_both] - test_inst2.test_fks_en = (fk_inst_en, fk_inst_both) - + if django.VERSION >= (1, 9): + test_inst2.test_fks.set((fk_inst_de, fk_inst_both)) + test_inst2.test_fks_en.set((fk_inst_en, fk_inst_both)) + else: + test_inst2.test_fks = [fk_inst_de, fk_inst_both] + test_inst2.test_fks_en = (fk_inst_en, fk_inst_both) self.assertEqual(fk_inst_both.test.pk, test_inst2.pk) self.assertEqual(fk_inst_both.test_id, test_inst2.pk) self.assertEqual(fk_inst_both.test_de, test_inst2) diff --git a/modeltranslation/translator.py b/modeltranslation/translator.py index 1188027..bcca0a5 100644 --- a/modeltranslation/translator.py +++ b/modeltranslation/translator.py @@ -529,11 +529,11 @@ class Translator(object): # Set related field names on other model if NEW_RELATED_API and not field.remote_field.is_hidden(): - other_opts = self._get_options_for_model(field.remote_field.to) + other_opts = self._get_options_for_model(field.remote_field.model) other_opts.related = True other_opts.related_fields.append(field.related_query_name()) # Add manager in case of non-registered model - add_manager(field.remote_field.to) + add_manager(field.remote_field.model) elif not NEW_RELATED_API and not field.rel.is_hidden(): other_opts = self._get_options_for_model(field.rel.to) other_opts.related = True @@ -543,7 +543,7 @@ class Translator(object): if isinstance(field, OneToOneField): # Fix translated_field caching for SingleRelatedObjectDescriptor sro_descriptor = ( - getattr(field.remote_field.to, field.remote_field.get_accessor_name()) + getattr(field.remote_field.model, field.remote_field.get_accessor_name()) if NEW_RELATED_API else getattr(field.rel.to, field.related.get_accessor_name())) patch_related_object_descriptor_caching(sro_descriptor) diff --git a/runtests.py b/runtests.py index c6667e7..5f688e2 100755 --- a/runtests.py +++ b/runtests.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import os import sys +import warnings import django from django.conf import settings @@ -47,6 +48,7 @@ def runtests(): MIDDLEWARE_CLASSES=(), ) + warnings.simplefilter('always', DeprecationWarning) if django.VERSION >= (1, 7): django.setup() failures = call_command(