OK I've tried the pre_delete approach but unfortunately it doesn't
work for what I'm trying here. It appears that django gets a
collection of objects that it is going to delete then it calls
pre_delete on each object before finally deleting the objects. So
django has decided which objects to delete way before the pre_delete
function is called meaning if I do a clear inside that function it
makes no difference to the list of objects that will be deleted.

At the moment the only approach I can think of is to define functions
for deleting models and do the clear logic before calling delete. This
seems really ugly to me but I can't see any other way.

def deleteModal2(obj):
    obj.related_model.clear()
    obj.delete()

def deleteModal1(obj):
    for childObj in obj.related_model.all():
        deleteModal2(childObj)

    obj.related_model.clear()
    obj.delete()


Any more ideas?




On Apr 13, 9:29 am, cootetom <coote...@gmail.com> wrote:
> Thanks Ian,
>
> I'll give that a go later. I don't suppose it matters what order they
> are called in because it's only clearing references to do with the
> model instance it's calling from.
>
> On Apr 13, 2:15 am, Ian Lewis <ianmle...@gmail.com> wrote:
>
>
>
> > Tom,
>
> > You could try doing this clear logic in a pre_delete signal. You might have
> > to test out the timing of when the signals get called but it should call
> > pre_delete for all deleted models. In this case it would call pre_delete on
> > model2 before model1 but you should be able to get what you are looking for.
>
> >http://docs.djangoproject.com/en/dev/ref/signals/#pre-delete
>
> > On Tue, Apr 13, 2010 at 8:21 AM, cootetom <coote...@gmail.com> wrote:
> > > Hi, I'm trying to figure out the way django deletes models so that I
> > > can clear the correct references that I need to prior to deleting. So
> > > I have models set up with overrided delete functions so that I can do
> > > clears before the actual delete. However, it appears the delete
> > > functions in a model don't get called in the cascade of deletes so not
> > > each child model gets to do it's clear of linked data before
> > > deleting.
>
> > > def model1(models.Model):
> > >    def delete(self):
> > >        self.related_model.clear()
> > >        super(model1, self).delete()
>
> > > def model2(models.Model):
> > >    model2 = models.ForeignKey(model2)
>
> > >    def delete(self):
> > >        self.another_related_model.clear()
> > >        super(model2, self).delete()
>
> > > So if I do model1.delete() then it will do it's clear but it appears
> > > it won't do the clear from model2? Am I getting this behaviour right
> > > or am I doing something wrong here?
>
> > > The model class seems like the best place to put delete logic in so
> > > that when it's deleted it clears any data it needs to first.
>
> > > - Tom
>
> > > --
> > > You received this message because you are subscribed to the Google Groups
> > > "Django users" group.
> > > To post to this group, send email to django-us...@googlegroups.com.
> > > To unsubscribe from this group, send email to
> > > django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@google
> > >  groups.com>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/django-users?hl=en.
>
> > --
> > =======================================
> > 株式会社ビープラウド  イアン・ルイス
> > 〒150-0021
> > 東京都渋谷区恵比寿西2-3-2 NSビル6階
> > email: ianmle...@beproud.jp
> > TEL:03-6416-9836
> > FAX:03-6416-9837http://www.beproud.jp/
> > =======================================

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to