Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 6397)
+++ django/db/models/query.py	(working copy)
@@ -1180,7 +1180,7 @@
                 if field.rel and field.null and field.rel.to in seen_objs:
                     setattr(instance, field.attname, None)
 
+            dispatcher.send(signal=signals.post_delete, sender=cls, instance=instance)
             setattr(instance, cls._meta.pk.attname, None)
-            dispatcher.send(signal=signals.post_delete, sender=cls, instance=instance)
 
     transaction.commit_unless_managed()
Index: tests/modeltests/signals/models.py
===================================================================
--- tests/modeltests/signals/models.py	(revision 6397)
+++ tests/modeltests/signals/models.py	(working copy)
@@ -54,7 +54,7 @@
 pre_delete signal, Tom Smith
 instance.id is not None: True
 post_delete signal, Tom Smith
-instance.id is None: True
+instance.id is None: False
 
 >>> p2 = Person(first_name='James', last_name='Jones')
 >>> p2.id = 99999
@@ -73,7 +73,7 @@
 pre_delete signal, James Jones
 instance.id is not None: True
 post_delete signal, James Jones
-instance.id is None: True
+instance.id is None: False
 
 >>> Person.objects.all()
 [<Person: James Jones>]
