issue #1: synchronise diffusions + delete empty diffusion and programs page when related object are deleted

This commit is contained in:
bkfox 2016-10-12 23:55:49 +02:00
parent f58f3352f2
commit bdd351d6d9
2 changed files with 37 additions and 2 deletions

View File

@ -384,6 +384,7 @@ class ProgramPage(Publication):
verbose_name = _('program'), verbose_name = _('program'),
related_name = 'page', related_name = 'page',
on_delete=models.SET_NULL, on_delete=models.SET_NULL,
unique = True,
blank=True, null=True, blank=True, null=True,
) )
# rss = models.URLField() # rss = models.URLField()
@ -469,8 +470,11 @@ class DiffusionPage(Publication):
aircox.models.Diffusion, aircox.models.Diffusion,
verbose_name = _('diffusion'), verbose_name = _('diffusion'),
related_name = 'page', related_name = 'page',
on_delete=models.SET_NULL, unique = True,
null=True, null=True,
# not blank because we enforce the connection to a diffusion
# (still users always tend to break sth)
on_delete=models.SET_NULL,
limit_choices_to = { limit_choices_to = {
'initial__isnull': True, 'initial__isnull': True,
}, },

View File

@ -1,4 +1,4 @@
from django.db.models.signals import post_save from django.db.models.signals import post_save, pre_delete
from django.dispatch import receiver from django.dispatch import receiver
from django.utils.translation import ugettext as _, ugettext_lazy from django.utils.translation import ugettext as _, ugettext_lazy
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
@ -131,4 +131,35 @@ def program_post_saved(sender, instance, created, *args, **kwargs):
) )
parent.add_child(instance = page) parent.add_child(instance = page)
@receiver(pre_delete, sender=aircox.Program)
def program_post_deleted(sender, instance, *args, **kwargs):
if not instance.page or (
instance.page.first().body or
Page.objects.descendant_of(instance).count()
):
return
instance.page.delete()
@receiver(post_save, sender=aircox.Diffusion)
def diffusion_post_saved(sender, instance, created, *args, **kwargs):
import aircox_cms.models as models
# TODO/FIXME: what about confirmed/unconfirmed;
# what about delete when not confirmed?
if not created or instance.page.count():
return
page = models.DiffusionPage.from_diffusion(
instance, live = False
)
instance.program.page.first().add_child(
instance = page
)
@receiver(pre_delete, sender=aircox.Program)
def diffusion_post_deleted(sender, instance, *args, **kwargs):
if not instance.page or instance.page.first().body:
return
instance.page.delete()