mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	This is a big internal change, but mostly backwards compatible with existing code. Also adds a couple of new features. Fixed #245, #1050, #1656, #1801, #2076, #2091, #2150, #2253, #2306, #2400, #2430, #2482, #2496, #2676, #2737, #2874, #2902, #2939, #3037, #3141, #3288, #3440, #3592, #3739, #4088, #4260, #4289, #4306, #4358, #4464, #4510, #4858, #5012, #5020, #5261, #5295, #5321, #5324, #5325, #5555, #5707, #5796, #5817, #5987, #6018, #6074, #6088, #6154, #6177, #6180, #6203, #6658 git-svn-id: http://code.djangoproject.com/svn/django/trunk@7477 bcc190cf-cafb-0310-a4f2-bffc1f526a37
		
			
				
	
	
		
			118 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| Testing signals before/after saving and deleting.
 | |
| """
 | |
| 
 | |
| from django.db import models
 | |
| from django.dispatch import dispatcher
 | |
| 
 | |
| class Person(models.Model):
 | |
|     first_name = models.CharField(max_length=20)
 | |
|     last_name = models.CharField(max_length=20)
 | |
| 
 | |
|     def __unicode__(self):
 | |
|         return u"%s %s" % (self.first_name, self.last_name)
 | |
| 
 | |
| 
 | |
| def pre_save_nokwargs_test(sender, instance):
 | |
|     print 'pre_save_nokwargs signal'
 | |
| 
 | |
| def post_save_nokwargs_test(sender, instance):
 | |
|     print 'post_save_nokwargs signal'
 | |
| 
 | |
| def pre_save_test(sender, instance, **kwargs):
 | |
|     print 'pre_save signal,', instance
 | |
|     if kwargs.get('raw'):
 | |
|         print 'Is raw'
 | |
| 
 | |
| def post_save_test(sender, instance, **kwargs):
 | |
|     print 'post_save signal,', instance
 | |
|     if 'created' in kwargs:
 | |
|         if kwargs['created']:
 | |
|             print 'Is created'
 | |
|         else:
 | |
|             print 'Is updated'
 | |
|     if kwargs.get('raw'):
 | |
|         print 'Is raw'
 | |
| 
 | |
| def pre_delete_test(sender, instance, **kwargs):
 | |
|     print 'pre_delete signal,', instance
 | |
|     print 'instance.id is not None: %s' % (instance.id != None)
 | |
| 
 | |
| def post_delete_test(sender, instance, **kwargs):
 | |
|     print 'post_delete signal,', instance
 | |
|     print 'instance.id is None: %s' % (instance.id == None)
 | |
| 
 | |
| __test__ = {'API_TESTS':"""
 | |
| >>> dispatcher.connect(pre_save_nokwargs_test, signal=models.signals.pre_save)
 | |
| >>> dispatcher.connect(post_save_nokwargs_test, signal=models.signals.post_save)
 | |
| >>> dispatcher.connect(pre_save_test, signal=models.signals.pre_save)
 | |
| >>> dispatcher.connect(post_save_test, signal=models.signals.post_save)
 | |
| >>> dispatcher.connect(pre_delete_test, signal=models.signals.pre_delete)
 | |
| >>> dispatcher.connect(post_delete_test, signal=models.signals.post_delete)
 | |
| 
 | |
| >>> p1 = Person(first_name='John', last_name='Smith')
 | |
| >>> p1.save()
 | |
| pre_save_nokwargs signal
 | |
| pre_save signal, John Smith
 | |
| post_save_nokwargs signal
 | |
| post_save signal, John Smith
 | |
| Is created
 | |
| 
 | |
| >>> p1.first_name = 'Tom'
 | |
| >>> p1.save()
 | |
| pre_save_nokwargs signal
 | |
| pre_save signal, Tom Smith
 | |
| post_save_nokwargs signal
 | |
| post_save signal, Tom Smith
 | |
| Is updated
 | |
| 
 | |
| # Calling an internal method purely so that we can trigger a "raw" save.
 | |
| >>> p1.save_base(raw=True)
 | |
| pre_save_nokwargs signal
 | |
| pre_save signal, Tom Smith
 | |
| Is raw
 | |
| post_save_nokwargs signal
 | |
| post_save signal, Tom Smith
 | |
| Is updated
 | |
| Is raw
 | |
| 
 | |
| >>> p1.delete()
 | |
| pre_delete signal, Tom Smith
 | |
| instance.id is not None: True
 | |
| post_delete signal, Tom Smith
 | |
| instance.id is None: False
 | |
| 
 | |
| >>> p2 = Person(first_name='James', last_name='Jones')
 | |
| >>> p2.id = 99999
 | |
| >>> p2.save()
 | |
| pre_save_nokwargs signal
 | |
| pre_save signal, James Jones
 | |
| post_save_nokwargs signal
 | |
| post_save signal, James Jones
 | |
| Is created
 | |
| 
 | |
| >>> p2.id = 99998
 | |
| >>> p2.save()
 | |
| pre_save_nokwargs signal
 | |
| pre_save signal, James Jones
 | |
| post_save_nokwargs signal
 | |
| post_save signal, James Jones
 | |
| Is created
 | |
| 
 | |
| >>> p2.delete()
 | |
| pre_delete signal, James Jones
 | |
| instance.id is not None: True
 | |
| post_delete signal, James Jones
 | |
| instance.id is None: False
 | |
| 
 | |
| >>> Person.objects.all()
 | |
| [<Person: James Jones>]
 | |
| 
 | |
| >>> dispatcher.disconnect(pre_save_nokwargs_test, signal=models.signals.pre_save)
 | |
| >>> dispatcher.disconnect(post_save_nokwargs_test, signal=models.signals.post_save)
 | |
| >>> dispatcher.disconnect(post_delete_test, signal=models.signals.post_delete)
 | |
| >>> dispatcher.disconnect(pre_delete_test, signal=models.signals.pre_delete)
 | |
| >>> dispatcher.disconnect(post_save_test, signal=models.signals.post_save)
 | |
| >>> dispatcher.disconnect(pre_save_test, signal=models.signals.pre_save)
 | |
| """}
 |