Changeset 2487
- Timestamp:
- 03/04/06 06:13:41 (3 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/magic-removal/django/db/models/base.py
r2457 r2487 11 11 from django.dispatch import dispatcher 12 12 from django.core.exceptions import ObjectDoesNotExist 13 from django.utils.datastructures import SortedDict 13 14 from django.utils.functional import curry 14 15 from django.conf import settings … … 221 222 222 223 # Find all the objects than need to be deleted 223 seen_objs = {}224 seen_objs = SortedDict() 224 225 self._collect_sub_objects(seen_objs) 225 226 django/branches/magic-removal/django/db/models/query.py
r2485 r2487 235 235 # Collect all the objects to be deleted, and all the objects that are related to 236 236 # the objects that are to be deleted 237 seen_objs = {}237 seen_objs = SortedDict() 238 238 for object in del_query: 239 239 object._collect_sub_objects(seen_objs) … … 816 816 return tables, joins, where, params 817 817 818 def compare_models(x, y):819 "Comparator for Models that puts models in an order where dependencies are easily resolved."820 for field in x._meta.fields:821 if field.rel and not field.null and field.rel.to == y:822 return -1823 for field in y._meta.fields:824 if field.rel and not field.null and field.rel.to == x:825 return 1826 return 0827 828 818 def delete_objects(seen_objs): 829 819 "Iterate through a list of seen classes, and remove any instances that are referred to" 830 seen_classes = set(seen_objs.keys()) 831 ordered_classes = list(seen_classes) 832 ordered_classes.sort(compare_models) 833 820 ordered_classes = seen_objs.keys() 821 ordered_classes.reverse() 822 834 823 cursor = connection.cursor() 835 824 … … 856 845 pk_list) 857 846 for field in cls._meta.fields: 858 if field.rel and field.null and field.rel.to in seen_ classes:847 if field.rel and field.null and field.rel.to in seen_objs: 859 848 cursor.execute("UPDATE %s SET %s=NULL WHERE %s IN (%s)" % \ 860 849 (backend.quote_name(cls._meta.db_table), … … 878 867 for pk_val, instance in seen_objs[cls]: 879 868 for field in cls._meta.fields: 880 if field.rel and field.null and field.rel.to in seen_ classes:869 if field.rel and field.null and field.rel.to in seen_objs: 881 870 setattr(instance, field.attname, None) 882 871 django/branches/magic-removal/django/utils/datastructures.py
r2105 r2487 61 61 62 62 def items(self): 63 for k in self.keyOrder: 64 yield k, dict.__getitem__(self, k) 63 return zip(self.keyOrder, self.values()) 65 64 66 65 def keys(self): 67 for k in self.keyOrder: 68 yield k 66 return self.keyOrder[:] 69 67 70 68 def values(self): 71 for k in self.keyOrder: 72 yield dict.__getitem__(self, k) 69 return [dict.__getitem__(self,k) for k in self.keyOrder] 73 70 74 71 def update(self, dict): 75 72 for k, v in dict.items(): 76 73 self.__setitem__(k, v) 74 75 def setdefault(self, key, default): 76 if key not in self.keyOrder: 77 self.keyOrder.append(key) 78 return dict.setdefault(self, key, default) 77 79 78 80 class MultiValueDictKeyError(KeyError):
