예제 #1
0
	def handle_noargs(self, **options):
		from django.db.models import get_apps, get_models

		print "       CHECKING CASCADE DELETE"
		for app in get_apps():
			loaded_models = get_models(app)
			print "%30s"  % app.__name__.upper().replace('.MODELS','')
			for x in loaded_models:
				model_name = unicode(x._meta.verbose_name).title()
				print "%30s :" % model_name, 
				seen_count = 0
				seen_types = []
				try:
					while 1:
						objs = x.objects.all().order_by('?')[:LOOP]
						seen_objs = CollectedObjects()
						for obj in objs:
							obj._collect_sub_objects(seen_objs, nullable=False)
				
						seen_types = []
						for seen_cls, seen_objs in seen_objs.items():
							if seen_cls not in seen_types:
								seen_types.append(seen_cls)

						if len(seen_types)==seen_count:
							break
						seen_count = len(seen_types)
					print [ x.__name__ for x in seen_types ]
				except Exception, e:
					print unicode(e)
			print ""
			print ""
예제 #2
0
def get_related_objects(obj):
    '''
        Return all related objects to this object. These objects
        will be deleted when the object is deleted.
        
        Return form is
        [(ModelClass, {id, instance}),]
    '''
    seen_objects = CollectedObjects()
    obj._collect_sub_objects(seen_objects)
    return seen_objects.items()
예제 #3
0
 def delete_marked_for_deletion(self, collect=True):
     """If this instance, or some remote instances are marked for deletion
     kill them.
     """
     if collect:
         from django.db.models.query_utils import CollectedObjects
         
         seen = CollectedObjects()
         
         self._collect_sub_objects(seen)
         for cls, items in seen.items():
             if issubclass(cls, PublicPublisher):
                 for item in items.values():
                     item.delete_marked_for_deletion(collect=False)
                 
     if self.mark_delete:
         self.delete()
예제 #4
0
 def _publisher_delete_marked(self, collect=True):
     """If this instance, or some remote instances are marked for deletion
     kill them.
     """
     if self.publisher_is_draft:
         # escape soon from draft models
         return 
     
     if collect:
         from django.db.models.query_utils import CollectedObjects
         seen = CollectedObjects()
         self._collect_sub_objects(seen)
         for cls, items in seen.items():
             if issubclass(cls, Publisher):
                 for item in items.values():
                     item._publisher_delete_marked(collect=False)
                 
     if self.publisher_state == Publisher.PUBLISHER_STATE_DELETE:
         try:
             self.delete()
         except AttributeError:
             # this exception may happen because of the plugin relations
             # to CMSPlugin and mppt way of _meta assignment
             pass