Loading django/db/models/sql/compiler.py +1 −1 Original line number Diff line number Diff line Loading @@ -995,7 +995,7 @@ class SQLDeleteCompiler(SQLCompiler): Creates the SQL for this query. Returns the SQL string and list of parameters. """ assert len(self.query.tables) == 1, \ assert len([t for t in self.query.tables if self.query.alias_refcount[t] > 0]) == 1, \ "Can only delete from one table at a time." qn = self.quote_name_unless_alias result = ['DELETE FROM %s' % qn(self.query.tables[0])] Loading docs/releases/1.8.5.txt +2 −1 Original line number Diff line number Diff line Loading @@ -9,4 +9,5 @@ Django 1.8.5 fixes several bugs in 1.8.4. Bugfixes ======== * ... * Fixed ``AssertionError`` in some delete queries with a model containing a field that is both a foreign and primary key (:ticket:`24951`). tests/one_to_one/models.py +1 −1 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ class MultiModel(models.Model): class Target(models.Model): pass name = models.CharField(max_length=50) class Pointer(models.Model): Loading tests/one_to_one/tests.py +9 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,8 @@ from django.test import TestCase from .models import ( Bar, Director, Favorites, HiddenPointer, ManualPrimaryKey, MultiModel, Place, RelatedModel, Restaurant, School, Target, UndergroundBar, Waiter, Place, Pointer, RelatedModel, Restaurant, School, Target, UndergroundBar, Waiter, ) Loading Loading @@ -256,6 +257,13 @@ class OneToOneTests(TestCase): [] ) def test_o2o_primary_key_delete(self): t = Target.objects.create(name='name') Pointer.objects.create(other=t) num_deleted, objs = Pointer.objects.filter(other__name='name').delete() self.assertEqual(num_deleted, 1) self.assertEqual(objs, {'one_to_one.Pointer': 1}) def test_reverse_object_does_not_exist_cache(self): """ Regression for #13839 and #17439. Loading Loading
django/db/models/sql/compiler.py +1 −1 Original line number Diff line number Diff line Loading @@ -995,7 +995,7 @@ class SQLDeleteCompiler(SQLCompiler): Creates the SQL for this query. Returns the SQL string and list of parameters. """ assert len(self.query.tables) == 1, \ assert len([t for t in self.query.tables if self.query.alias_refcount[t] > 0]) == 1, \ "Can only delete from one table at a time." qn = self.quote_name_unless_alias result = ['DELETE FROM %s' % qn(self.query.tables[0])] Loading
docs/releases/1.8.5.txt +2 −1 Original line number Diff line number Diff line Loading @@ -9,4 +9,5 @@ Django 1.8.5 fixes several bugs in 1.8.4. Bugfixes ======== * ... * Fixed ``AssertionError`` in some delete queries with a model containing a field that is both a foreign and primary key (:ticket:`24951`).
tests/one_to_one/models.py +1 −1 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ class MultiModel(models.Model): class Target(models.Model): pass name = models.CharField(max_length=50) class Pointer(models.Model): Loading
tests/one_to_one/tests.py +9 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,8 @@ from django.test import TestCase from .models import ( Bar, Director, Favorites, HiddenPointer, ManualPrimaryKey, MultiModel, Place, RelatedModel, Restaurant, School, Target, UndergroundBar, Waiter, Place, Pointer, RelatedModel, Restaurant, School, Target, UndergroundBar, Waiter, ) Loading Loading @@ -256,6 +257,13 @@ class OneToOneTests(TestCase): [] ) def test_o2o_primary_key_delete(self): t = Target.objects.create(name='name') Pointer.objects.create(other=t) num_deleted, objs = Pointer.objects.filter(other__name='name').delete() self.assertEqual(num_deleted, 1) self.assertEqual(objs, {'one_to_one.Pointer': 1}) def test_reverse_object_does_not_exist_cache(self): """ Regression for #13839 and #17439. Loading