2 Testing signals before/after saving and deleting.
5 from django
.db
import models
6 from django
.dispatch
import dispatcher
8 class Person(models
.Model
):
9 first_name
= models
.CharField(max_length
=20)
10 last_name
= models
.CharField(max_length
=20)
12 def __unicode__(self
):
13 return u
"%s %s" % (self
.first_name
, self
.last_name
)
16 def pre_save_nokwargs_test(sender
, instance
):
17 print 'pre_save_nokwargs signal'
19 def post_save_nokwargs_test(sender
, instance
):
20 print 'post_save_nokwargs signal'
22 def pre_save_test(sender
, instance
, **kwargs
):
23 print 'pre_save signal,', instance
27 def post_save_test(sender
, instance
, **kwargs
):
28 print 'post_save signal,', instance
29 if 'created' in kwargs
:
37 def pre_delete_test(sender
, instance
, **kwargs
):
38 print 'pre_delete signal,', instance
39 print 'instance.id is not None: %s' % (instance
.id != None)
41 def post_delete_test(sender
, instance
, **kwargs
):
42 print 'post_delete signal,', instance
43 print 'instance.id is None: %s' % (instance
.id == None)
45 __test__
= {'API_TESTS':"""
46 >>> dispatcher.connect(pre_save_nokwargs_test, signal=models.signals.pre_save)
47 >>> dispatcher.connect(post_save_nokwargs_test, signal=models.signals.post_save)
48 >>> dispatcher.connect(pre_save_test, signal=models.signals.pre_save)
49 >>> dispatcher.connect(post_save_test, signal=models.signals.post_save)
50 >>> dispatcher.connect(pre_delete_test, signal=models.signals.pre_delete)
51 >>> dispatcher.connect(post_delete_test, signal=models.signals.post_delete)
53 >>> p1 = Person(first_name='John', last_name='Smith')
55 pre_save_nokwargs signal
56 pre_save signal, John Smith
57 post_save_nokwargs signal
58 post_save signal, John Smith
61 >>> p1.first_name = 'Tom'
63 pre_save_nokwargs signal
64 pre_save signal, Tom Smith
65 post_save_nokwargs signal
66 post_save signal, Tom Smith
69 # Calling an internal method purely so that we can trigger a "raw" save.
70 >>> p1.save_base(raw=True)
71 pre_save_nokwargs signal
72 pre_save signal, Tom Smith
74 post_save_nokwargs signal
75 post_save signal, Tom Smith
80 pre_delete signal, Tom Smith
81 instance.id is not None: True
82 post_delete signal, Tom Smith
83 instance.id is None: False
85 >>> p2 = Person(first_name='James', last_name='Jones')
88 pre_save_nokwargs signal
89 pre_save signal, James Jones
90 post_save_nokwargs signal
91 post_save signal, James Jones
96 pre_save_nokwargs signal
97 pre_save signal, James Jones
98 post_save_nokwargs signal
99 post_save signal, James Jones
103 pre_delete signal, James Jones
104 instance.id is not None: True
105 post_delete signal, James Jones
106 instance.id is None: False
108 >>> Person.objects.all()
109 [<Person: James Jones>]
111 >>> dispatcher.disconnect(pre_save_nokwargs_test, signal=models.signals.pre_save)
112 >>> dispatcher.disconnect(post_save_nokwargs_test, signal=models.signals.post_save)
113 >>> dispatcher.disconnect(post_delete_test, signal=models.signals.post_delete)
114 >>> dispatcher.disconnect(pre_delete_test, signal=models.signals.pre_delete)
115 >>> dispatcher.disconnect(post_save_test, signal=models.signals.post_save)
116 >>> dispatcher.disconnect(pre_save_test, signal=models.signals.pre_save)