forked from rc/aircox
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'),
|
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,
|
||||||
},
|
},
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user