Django

Code

Changeset 7054

Show
Ignore:
Timestamp:
02/01/08 11:32:29 (6 months ago)
Author:
gwilson
Message:

Fixed #5422 -- Added a raw parameter to model pre_save and post_save signals, based on patch from graham.carlyle@maplecroft.net.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/models/base.py

    r6838 r7054  
    210210 
    211211    def save(self, raw=False): 
    212         dispatcher.send(signal=signals.pre_save, sender=self.__class__, instance=self) 
     212        dispatcher.send(signal=signals.pre_save, sender=self.__class__, 
     213                        instance=self, raw=raw) 
    213214 
    214215        non_pks = [f for f in self._meta.fields if not f.primary_key] 
     
    271272        # Run any post-save hooks. 
    272273        dispatcher.send(signal=signals.post_save, sender=self.__class__, 
    273                 instance=self, created=(not record_exists)
     274                        instance=self, created=(not record_exists), raw=raw
    274275 
    275276    save.alters_data = True 
  • django/trunk/tests/modeltests/signals/models.py

    r6411 r7054  
    1414 
    1515 
     16def pre_save_nokwargs_test(sender, instance): 
     17    print 'pre_save_nokwargs signal' 
     18 
     19def post_save_nokwargs_test(sender, instance): 
     20    print 'post_save_nokwargs signal' 
     21 
    1622def pre_save_test(sender, instance, **kwargs): 
    1723    print 'pre_save signal,', instance 
     24    if kwargs.get('raw'): 
     25        print 'Is raw' 
    1826 
    1927def post_save_test(sender, instance, **kwargs): 
     
    2432        else: 
    2533            print 'Is updated' 
     34    if kwargs.get('raw'): 
     35        print 'Is raw' 
    2636 
    2737def pre_delete_test(sender, instance, **kwargs): 
    2838    print 'pre_delete signal,', instance 
    29     print 'instance.id is not None: %s' % (instance.id != None)   
     39    print 'instance.id is not None: %s' % (instance.id != None) 
    3040 
    3141def post_delete_test(sender, instance, **kwargs): 
    3242    print 'post_delete signal,', instance 
    33     print 'instance.id is None: %s' % (instance.id == None)   
     43    print 'instance.id is None: %s' % (instance.id == None) 
    3444 
    3545__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) 
    3648>>> dispatcher.connect(pre_save_test, signal=models.signals.pre_save) 
    3749>>> dispatcher.connect(post_save_test, signal=models.signals.post_save) 
     
    4153>>> p1 = Person(first_name='John', last_name='Smith') 
    4254>>> p1.save() 
     55pre_save_nokwargs signal 
    4356pre_save signal, John Smith 
     57post_save_nokwargs signal 
    4458post_save signal, John Smith 
    4559Is created 
     
    4761>>> p1.first_name = 'Tom' 
    4862>>> p1.save() 
     63pre_save_nokwargs signal 
    4964pre_save signal, Tom Smith 
     65post_save_nokwargs signal 
    5066post_save signal, Tom Smith 
    5167Is updated 
     68 
     69>>> p1.save(raw=True) 
     70pre_save_nokwargs signal 
     71pre_save signal, Tom Smith 
     72Is raw 
     73post_save_nokwargs signal 
     74post_save signal, Tom Smith 
     75Is updated 
     76Is raw 
    5277 
    5378>>> p1.delete() 
     
    6085>>> p2.id = 99999 
    6186>>> p2.save() 
     87pre_save_nokwargs signal 
    6288pre_save signal, James Jones 
     89post_save_nokwargs signal 
    6390post_save signal, James Jones 
    6491Is created 
     
    6693>>> p2.id = 99998 
    6794>>> p2.save() 
     95pre_save_nokwargs signal 
    6896pre_save signal, James Jones 
     97post_save_nokwargs signal 
    6998post_save signal, James Jones 
    7099Is created 
     
    79108[<Person: James Jones>] 
    80109 
     110>>> dispatcher.disconnect(pre_save_nokwargs_test, signal=models.signals.pre_save) 
     111>>> dispatcher.disconnect(post_save_nokwargs_test, signal=models.signals.post_save) 
    81112>>> dispatcher.disconnect(post_delete_test, signal=models.signals.post_delete) 
    82113>>> dispatcher.disconnect(pre_delete_test, signal=models.signals.pre_delete)