Merged the queryset-refactor branch into trunk.
[fdr-django.git] / tests / modeltests / signals / models.py
blobfc58d90a14bad596e703531ba2a95099179ff144
1 """
2 Testing signals before/after saving and deleting.
3 """
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
24 if kwargs.get('raw'):
25 print 'Is raw'
27 def post_save_test(sender, instance, **kwargs):
28 print 'post_save signal,', instance
29 if 'created' in kwargs:
30 if kwargs['created']:
31 print 'Is created'
32 else:
33 print 'Is updated'
34 if kwargs.get('raw'):
35 print 'Is raw'
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')
54 >>> p1.save()
55 pre_save_nokwargs signal
56 pre_save signal, John Smith
57 post_save_nokwargs signal
58 post_save signal, John Smith
59 Is created
61 >>> p1.first_name = 'Tom'
62 >>> p1.save()
63 pre_save_nokwargs signal
64 pre_save signal, Tom Smith
65 post_save_nokwargs signal
66 post_save signal, Tom Smith
67 Is updated
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
73 Is raw
74 post_save_nokwargs signal
75 post_save signal, Tom Smith
76 Is updated
77 Is raw
79 >>> p1.delete()
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')
86 >>> p2.id = 99999
87 >>> p2.save()
88 pre_save_nokwargs signal
89 pre_save signal, James Jones
90 post_save_nokwargs signal
91 post_save signal, James Jones
92 Is created
94 >>> p2.id = 99998
95 >>> p2.save()
96 pre_save_nokwargs signal
97 pre_save signal, James Jones
98 post_save_nokwargs signal
99 post_save signal, James Jones
100 Is created
102 >>> p2.delete()
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)
117 """}