Hey all,

I'm quite stumped with a problem that recently started showing up in my 
code. I have a model called a Widget that can have an associated Blob 
object. When a Widget is deleted, I want to make sure that the Blob 
associated with it isn't used elsewhere, and if it's not, delete it. I do 
that via a postDelete hook, as follows:

def postDeleteWidget(sender, **kwargs):
    """
    Delete the associated blob when the widgetis deleted.
    """
    widget = kwargs['instance']


    #Make sure this blob isn't used elsewhere
    if widget.blob is not None and Widget.objects.filter(blob=widget.blob).
count() == 0:
        widget.blob.delete()

This come is failing when it first looks up widget.blob in these Django 
files:

File "C:\Python27\Lib\site-packages\django\db\models\fields\related.py", 
line 617, in __get__
  rel_obj = qs.get()
File "C:\Python27\Lib\site-packages\django\db\models\query.py", line 334, in 
get
  self.model._meta.object_name

myproject.apps.blobs.models.DoesNotExist: Blob matching query does not exist
.

Now here's the weird part. If I insert "sleep(1)" after getting the widget, 
the code works fine. It deletes the associated blob as expected. I'm really 
at a loss in terms of how to explain this. I'd appreciate any advice. Even 
printing 'widget.blob' before the if statement usually resolves it. Is this 
some kind of race condition involved in accessing a related key on a 
postDelete hook.

Thanks,
-Keilan

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/75b34cd3-a987-473a-a5bd-69346fac4096%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to