mirror of
https://github.com/django/django.git
synced 2025-10-10 15:29:11 +00:00
This means subclasses can override save() without needing to worry about passing around the internal parameters (an issue for subclassable models, which would have meant every model, since you don't know when somebody will subclass your model). Slightly backwards incompatible, since it moves "raw" back to being part of the internal API (it's only needed by the serializer and was intended to be internal use only). If external code really needs this, they can call Model.save_base() and pass in raw there. git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@7221 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)
|
|
"""}
|