issue #1: synchronise diffusions + delete empty diffusion and programs page when related object are deleted
This commit is contained in:
parent
f58f3352f2
commit
bdd351d6d9
|
@ -384,6 +384,7 @@ class ProgramPage(Publication):
|
|||
verbose_name = _('program'),
|
||||
related_name = 'page',
|
||||
on_delete=models.SET_NULL,
|
||||
unique = True,
|
||||
blank=True, null=True,
|
||||
)
|
||||
# rss = models.URLField()
|
||||
|
@ -469,8 +470,11 @@ class DiffusionPage(Publication):
|
|||
aircox.models.Diffusion,
|
||||
verbose_name = _('diffusion'),
|
||||
related_name = 'page',
|
||||
on_delete=models.SET_NULL,
|
||||
unique = 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 = {
|
||||
'initial__isnull': True,
|
||||
},
|
||||
|
|
|
@ -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.utils.translation import ugettext as _, ugettext_lazy
|
||||
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)
|
||||
|
||||
@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()
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user