Commit 19c7db00 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

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
parent 55ba38f9
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -835,10 +835,14 @@ def delete_objects(seen_objs):
        del_query.delete_batch_related(pk_list)

        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
                    filter(lambda f: f.column == field.column,
                    field.rel.to._meta.fields)):
                if model:
                    sql.UpdateQuery(model, connection).clear_related(field,
                            pk_list)
                else:
                    update_query.clear_related(field, pk_list)

    # Now delete the actual data.
+12 −0
Original line number Diff line number Diff line
@@ -52,7 +52,12 @@ class Parent(models.Model):
class Child(Parent):
    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':"""
# Regression for #7350, #7202
@@ -182,4 +187,11 @@ True
>>> 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()

"""}