Loading django/db/models/deletion.py +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ def get_candidate_relations_to_delete(opts): # The candidate relations are the ones that come from N-1 and 1-1 relations. # N-N (i.e., many-to-many) relations aren't candidates for deletion. return ( f for f in opts.get_fields(include_hidden=True) f for f in opts.concrete_model._meta.get_fields(include_hidden=True) if f.auto_created and not f.concrete and (f.one_to_one or f.one_to_many) ) Loading tests/proxy_model_inheritance/models.py +6 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,12 @@ class ConcreteModel(models.Model): pass class ConcreteModelSubclass(ConcreteModel): class ProxyModel(ConcreteModel): class Meta: proxy = True class ConcreteModelSubclass(ProxyModel): pass Loading tests/proxy_model_inheritance/tests.py +8 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ from django.utils._os import upath from .models import ( ConcreteModel, ConcreteModelSubclass, ConcreteModelSubclassProxy, ProxyModel, ) Loading Loading @@ -43,3 +44,10 @@ class MultiTableInheritanceProxyTest(TestCase): self.assertEqual(0, ConcreteModelSubclassProxy.objects.count()) self.assertEqual(0, ConcreteModelSubclass.objects.count()) self.assertEqual(0, ConcreteModel.objects.count()) def test_deletion_through_intermediate_proxy(self): child = ConcreteModelSubclass.objects.create() proxy = ProxyModel.objects.get(pk=child.pk) proxy.delete() self.assertFalse(ConcreteModel.objects.exists()) self.assertFalse(ConcreteModelSubclass.objects.exists()) Loading
django/db/models/deletion.py +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ def get_candidate_relations_to_delete(opts): # The candidate relations are the ones that come from N-1 and 1-1 relations. # N-N (i.e., many-to-many) relations aren't candidates for deletion. return ( f for f in opts.get_fields(include_hidden=True) f for f in opts.concrete_model._meta.get_fields(include_hidden=True) if f.auto_created and not f.concrete and (f.one_to_one or f.one_to_many) ) Loading
tests/proxy_model_inheritance/models.py +6 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,12 @@ class ConcreteModel(models.Model): pass class ConcreteModelSubclass(ConcreteModel): class ProxyModel(ConcreteModel): class Meta: proxy = True class ConcreteModelSubclass(ProxyModel): pass Loading
tests/proxy_model_inheritance/tests.py +8 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ from django.utils._os import upath from .models import ( ConcreteModel, ConcreteModelSubclass, ConcreteModelSubclassProxy, ProxyModel, ) Loading Loading @@ -43,3 +44,10 @@ class MultiTableInheritanceProxyTest(TestCase): self.assertEqual(0, ConcreteModelSubclassProxy.objects.count()) self.assertEqual(0, ConcreteModelSubclass.objects.count()) self.assertEqual(0, ConcreteModel.objects.count()) def test_deletion_through_intermediate_proxy(self): child = ConcreteModelSubclass.objects.create() proxy = ProxyModel.objects.get(pk=child.pk) proxy.delete() self.assertFalse(ConcreteModel.objects.exists()) self.assertFalse(ConcreteModelSubclass.objects.exists())