From 11f290ddf6f3f8aaab2485ce13f995005f5f724c Mon Sep 17 00:00:00 2001 From: krego Date: Mon, 3 Apr 2017 18:06:37 +0200 Subject: [PATCH 1/4] Add checking if model has an all_objects attribute --- django_permanent/related.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/django_permanent/related.py b/django_permanent/related.py index 06dbaa1..cf04ea9 100644 --- a/django_permanent/related.py +++ b/django_permanent/related.py @@ -64,7 +64,10 @@ def wrapper(self, **hints): if django.VERSION < (1, 9, 0): return self.field.rel.to.all_objects else: - return self.field.remote_field.model.all_objects + model = self.field.remote_field.model + if hasattr(model, 'all_objects'): + return model.all_objects + return model.objects return func(self, **hints) return wrapper From c53024a51636dcf3e84b699d8ed4958ee6140abe Mon Sep 17 00:00:00 2001 From: krego Date: Mon, 3 Apr 2017 18:07:19 +0200 Subject: [PATCH 2/4] Add additional test models --- django_permanent/tests/test_app/models.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/django_permanent/tests/test_app/models.py b/django_permanent/tests/test_app/models.py index ee60bdb..b19a50b 100644 --- a/django_permanent/tests/test_app/models.py +++ b/django_permanent/tests/test_app/models.py @@ -19,6 +19,15 @@ class MyPermanentModel(PermanentModel, BaseTestModel): pass +class RegularModel(BaseTestModel): + name = models.CharField(max_length=255, blank=True, null=True) + pass + + +class RemovableRegularDepended(PermanentModel, BaseTestModel): + dependence = models.ForeignKey(RegularModel, on_delete=models.CASCADE) + + class RemovableDepended(BaseTestModel): dependence = models.ForeignKey(MyPermanentModel, on_delete=models.CASCADE) From bdde297233eb7c83c862358854127c8654410aae Mon Sep 17 00:00:00 2001 From: krego Date: Mon, 3 Apr 2017 18:07:32 +0200 Subject: [PATCH 3/4] Add additional test cases --- django_permanent/tests/cases.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/django_permanent/tests/cases.py b/django_permanent/tests/cases.py index a707eae..50ef76f 100644 --- a/django_permanent/tests/cases.py +++ b/django_permanent/tests/cases.py @@ -7,6 +7,7 @@ from django.test import TestCase from django.utils.timezone import now +from django_permanent.tests.test_app.models import RegularModel, RemovableRegularDepended from .test_app.models import ( CustomQsPermanent, M2MFrom, @@ -62,6 +63,15 @@ def test_removable_nullable_depended(self): depended = model.objects.first() self.assertEqual(depended.dependence, None) + def test_remove_removable_nullable_depended(self): + model = RemovableRegularDepended + test_model = model.objects.create(dependence=RegularModel.objects.create(name='Test')) + test_model.delete() + try: + self.assertIsNotNone(model.deleted_objects.first().dependence) + except AttributeError: + self.fail() + def test_permanent_depended(self): model = PermanentDepended depended = model.objects.create(dependence=self.permanent) From 8566dfbc8644747888dcd521c9264214bbb372c9 Mon Sep 17 00:00:00 2001 From: krego Date: Mon, 3 Apr 2017 18:21:58 +0200 Subject: [PATCH 4/4] Refactor & fix all_objects bug for 1.8 <= django < 1.9 --- django_permanent/related.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/django_permanent/related.py b/django_permanent/related.py index cf04ea9..6cb040f 100644 --- a/django_permanent/related.py +++ b/django_permanent/related.py @@ -62,12 +62,12 @@ def wrapper(self, **hints): instance = hints.get('instance') if instance and isinstance(instance, PermanentModel) and getattr(instance, settings.FIELD): if django.VERSION < (1, 9, 0): - return self.field.rel.to.all_objects + model = self.field.rel.to else: model = self.field.remote_field.model - if hasattr(model, 'all_objects'): - return model.all_objects - return model.objects + if hasattr(model, 'all_objects'): + return model.all_objects + return model.objects return func(self, **hints) return wrapper