def get_containers(self): try: return self._flat_containers except: try: c = json_loads(self.containers or "") except ValueError: c = {} r = dict(c.get('_parent_', {}).items()) for (k,v) in c.items(): if k.startswith('_'): continue if v: r[k] = v self._flat_containers = r return r
def save(self,*args,**kwargs): try: if not self.parent and self.slug != DEFAULT_LAYOUT_SLUG: self.parent = Layout.get() if self.parent and self.parent != self: try: c = json_loads(self.containers or "") except ValueError: c = {} r = dict(self.parent.get_containers().items()) for (k,v) in c.items(): if v: r[k] = None del r[k] if r: c['_parent_'] = r self.containers = json_dumps(c) except: pass super(Layout, self).save(*args, **kwargs) children = Layout.objects.filter(parent=self).exclude(pk=self.pk) for child in children: child.save()