# HG changeset patch # User gibus # Date 1334310822 -7200 # Node ID 2d14a80716e2f10934f2ef5e6f31da4d674bb4b3 # Parent 87adb908e6497480040fcc2ff8a7423c745ce877 When last_version is deleted, do not delete text and previous versions in cascade, but really delete text only when there is no previous version, otherwise update text.last_version with previous version. diff -r 87adb908e649 -r 2d14a80716e2 src/cm/denorm_engine.py --- a/src/cm/denorm_engine.py Fri Apr 06 12:35:57 2012 +0200 +++ b/src/cm/denorm_engine.py Fri Apr 13 11:53:42 2012 +0200 @@ -21,11 +21,19 @@ pass #logging.warning('No text found for text_version: %i' %text_version.id) +# GIB when deleting last revision, do not delete related text +def delete_last_version (sender, instance, signal, *args, **kwargs): + if instance.id == instance.text.last_text_version_id: + previous = instance.get_previous_version() + if previous: + instance.text.last_text_version_id = previous.id + instance.text.save() def connect_all(): # text updated by text_version + signals.pre_delete.connect(delete_last_version, sender=TextVersion) signals.post_save.connect(update_text_from_last_version, sender=TextVersion) signals.post_delete.connect(update_text_from_last_version, sender=TextVersion) -connect_all() \ No newline at end of file +connect_all() diff -r 87adb908e649 -r 2d14a80716e2 src/cm/models.py --- a/src/cm/models.py Fri Apr 06 12:35:57 2012 +0200 +++ b/src/cm/models.py Fri Apr 13 11:53:42 2012 +0200 @@ -44,7 +44,7 @@ private_feed_key = models.CharField(max_length=20, db_index=True, unique=True, blank=True, null=True, default=None) # denormalized fields - last_text_version = models.ForeignKey("TextVersion", related_name='related_text', null=True, blank=True) + last_text_version = models.ForeignKey("TextVersion", related_name='related_text', null=True, blank=True, on_delete=models.SET_NULL) title = models.TextField() objects = TextManager() @@ -84,6 +84,9 @@ if modif: self.save() + # GIB: there is no more version for this text => delete it + if real_last_text_version == None and last_text_version == None: + self.real_delete() def get_title(self): return self.get_latest_version().title