Fixed #7853 -- Fixed another case of deleting inherited models with foreign key
references. Thanks to Russell for the test case that demonstrated the problem. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8128 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
55ba38f9d2
commit
19c7db0058
|
@ -835,11 +835,15 @@ def delete_objects(seen_objs):
|
||||||
del_query.delete_batch_related(pk_list)
|
del_query.delete_batch_related(pk_list)
|
||||||
|
|
||||||
update_query = sql.UpdateQuery(cls, connection)
|
update_query = sql.UpdateQuery(cls, connection)
|
||||||
for field in cls._meta.fields:
|
for field, model in cls._meta.get_fields_with_model():
|
||||||
if (field.rel and field.null and field.rel.to in seen_objs and
|
if (field.rel and field.null and field.rel.to in seen_objs and
|
||||||
filter(lambda f: f.column == field.column,
|
filter(lambda f: f.column == field.column,
|
||||||
field.rel.to._meta.fields)):
|
field.rel.to._meta.fields)):
|
||||||
update_query.clear_related(field, pk_list)
|
if model:
|
||||||
|
sql.UpdateQuery(model, connection).clear_related(field,
|
||||||
|
pk_list)
|
||||||
|
else:
|
||||||
|
update_query.clear_related(field, pk_list)
|
||||||
|
|
||||||
# Now delete the actual data.
|
# Now delete the actual data.
|
||||||
for cls in ordered_classes:
|
for cls in ordered_classes:
|
||||||
|
|
|
@ -52,7 +52,12 @@ class Parent(models.Model):
|
||||||
class Child(Parent):
|
class Child(Parent):
|
||||||
name = models.CharField(max_length=10)
|
name = models.CharField(max_length=10)
|
||||||
|
|
||||||
|
class SelfRefParent(models.Model):
|
||||||
|
parent_data = models.IntegerField()
|
||||||
|
self_data = models.ForeignKey('self', null=True)
|
||||||
|
|
||||||
|
class SelfRefChild(SelfRefParent):
|
||||||
|
child_data = models.IntegerField()
|
||||||
|
|
||||||
__test__ = {'API_TESTS':"""
|
__test__ = {'API_TESTS':"""
|
||||||
# Regression for #7350, #7202
|
# Regression for #7350, #7202
|
||||||
|
@ -182,4 +187,11 @@ True
|
||||||
>>> Supplier.objects.filter(restaurant=Restaurant(name='xx', address='yy'))
|
>>> Supplier.objects.filter(restaurant=Restaurant(name='xx', address='yy'))
|
||||||
[]
|
[]
|
||||||
|
|
||||||
|
# Regression test for #7853
|
||||||
|
# If the parent class has a self-referential link, make sure that any updates
|
||||||
|
# to that link via the child update the right table.
|
||||||
|
|
||||||
|
>>> obj = SelfRefChild.objects.create(child_data=37, parent_data=42)
|
||||||
|
>>> obj.delete()
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
Loading…
Reference in New Issue