Changeset 1797
- Timestamp:
- 12/29/05 15:42:39 (3 years ago)
- Files:
-
- django/branches/magic-removal/django/contrib/admin/views/stages/change.py (modified) (2 diffs)
- django/branches/magic-removal/django/core/formfields.py (modified) (3 diffs)
- django/branches/magic-removal/django/db/models/base.py (modified) (2 diffs)
- django/branches/magic-removal/django/db/models/fields/__init__.py (modified) (2 diffs)
- django/branches/magic-removal/django/db/models/manipulators.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/magic-removal/django/contrib/admin/views/stages/change.py
r1777 r1797 50 50 #save a copy of the data to use for errors later. 51 51 data = new_data.copy() 52 53 52 manipulator.do_html2python(new_data) 54 53 #update the manipulator with the effects of previous commands. … … 56 55 #get the errors on the updated shape of the manipulator 57 56 #HACK - validators should not work on POSTED data directly... 58 errors = manipulator.get_validation_errors(data)57 59 58 if request.POST.has_key("_preview"): 60 pass59 errors = manipulator.get_validation_errors(data) 61 60 elif request.POST.has_key("command"): 62 61 command_name = request.POST.get("command") 63 62 manipulator.do_command(command_name) 64 new_data = manipulator.flatten_data() 65 elif errors: 63 errors = manipulator.get_validation_errors(data) 66 64 new_data = manipulator.flatten_data() 67 65 else: 68 new_object = manipulator.save_from_update() 69 log_change_message(request.user, opts, manipulator, new_object) 70 msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': opts.verbose_name, 'obj': new_object} 71 pk_value = getattr(new_object, opts.pk.attname) 72 if request.POST.has_key("_continue"): 73 request.user.add_message(msg + ' ' + _("You may edit it again below.")) 74 if request.REQUEST.has_key('_popup'): 75 return HttpResponseRedirect(request.path + "?_popup=1") 66 errors = manipulator.get_validation_errors(data) 67 if errors: 68 new_data = manipulator.flatten_data() 69 else: 70 new_object = manipulator.save_from_update() 71 log_change_message(request.user, opts, manipulator, new_object) 72 msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': opts.verbose_name, 'obj': new_object} 73 pk_value = getattr(new_object, opts.pk.attname) 74 if request.POST.has_key("_continue"): 75 request.user.add_message(msg + ' ' + _("You may edit it again below.")) 76 if request.REQUEST.has_key('_popup'): 77 return HttpResponseRedirect(request.path + "?_popup=1") 78 else: 79 return HttpResponseRedirect(request.path) 80 elif request.POST.has_key("_saveasnew"): 81 request.user.add_message(_('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % {'name': opts.verbose_name, 'obj': new_object}) 82 return HttpResponseRedirect("../../%s/" % pk_value) 83 elif request.POST.has_key("_addanother"): 84 request.user.add_message(msg + ' ' + (_("You may add another %s below.") % opts.verbose_name)) 85 return HttpResponseRedirect("../../add/") 76 86 else: 77 return HttpResponseRedirect(request.path) 78 elif request.POST.has_key("_saveasnew"): 79 request.user.add_message(_('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % {'name': opts.verbose_name, 'obj': new_object}) 80 return HttpResponseRedirect("../../%s/" % pk_value) 81 elif request.POST.has_key("_addanother"): 82 request.user.add_message(msg + ' ' + (_("You may add another %s below.") % opts.verbose_name)) 83 return HttpResponseRedirect("../../add/") 84 else: 85 request.user.add_message(msg) 86 return HttpResponseRedirect("../../") 87 request.user.add_message(msg) 88 return HttpResponseRedirect("../../") 87 89 else: 88 90 # Populate new_data with a "flattened" version of the current data. django/branches/magic-removal/django/core/formfields.py
r1772 r1797 56 56 errors = {} 57 57 for field in self.fields: 58 if field.is_required and not new_data.get(field.field_name, False): 59 errors.setdefault(field.field_name, []).append(gettext_lazy('This field is required.')) 60 continue 61 try: 62 validator_list = field.validator_list 63 if hasattr(self, 'validate_%s' % field.field_name): 64 validator_list.append(getattr(self, 'validate_%s' % field.field_name)) 65 for validator in validator_list: 66 if field.is_required or new_data.get(field.field_name, False) or hasattr(validator, 'always_test'): 67 try: 68 if hasattr(field, 'requires_data_list'): 69 validator(new_data.getlist(field.field_name), new_data) 70 else: 71 validator(new_data.get(field.field_name, ''), new_data) 72 except validators.ValidationError, e: 73 errors.setdefault(field.field_name, []).extend(e.messages) 74 # If a CriticalValidationError is raised, ignore any other ValidationErrors 75 # for this particular field 76 except validators.CriticalValidationError, e: 77 errors.setdefault(field.field_name, []).extend(e.messages) 58 errors.update(field.get_validation_errors(new_data)) 59 val_name = 'validate_%s' % field.field_name 60 if hasattr(self, val_name): 61 val = getattr(self, val_name) 62 try: 63 field.run_validator(new_data, val) 64 except (validators.ValidationError, validators.CriticalValidationError), e: 65 errors.setdefault(field.field_name, []).extend(e.messages) 66 67 # if field.is_required and not new_data.get(field.field_name, False): 68 # errors.setdefault(field.field_name, []).append(gettext_lazy('This field is required.')) 69 # continue 70 # try: 71 # validator_list = field.validator_list 72 # if hasattr(self, 'validate_%s' % field.field_name): 73 # validator_list.append(getattr(self, 'validate_%s' % field.field_name)) 74 # for validator in validator_list: 75 # if field.is_required or new_data.get(field.field_name, False) or hasattr(validator, 'always_test'): 76 # try: 77 # if hasattr(field, 'requires_data_list'): 78 # validator(new_data.getlist(field.field_name), new_data) 79 # else: 80 # validator(new_data.get(field.field_name, ''), new_data) 81 # except validators.ValidationError, e: 82 # errors.setdefault(field.field_name, []).extend(e.messages) 83 # # If a CriticalValidationError is raised, ignore any other ValidationErrors 84 # # for this particular field 85 # except validators.CriticalValidationError, e: 86 # errors.setdefault(field.field_name, []).extend(e.messages) 78 87 return errors 79 88 … … 90 99 expected to deal with invalid input. 91 100 """ 101 print "converting for ", self, self.fields 92 102 for field in self.fields: 93 103 field.convert_post_data(new_data) … … 315 325 converted_data = d 316 326 new_data.setlist(name, converted_data) 317 # else: 318 # try: 319 # # individual fields deal with None values themselves 320 # new_data.setlist(name, [self.__class__.html2python(None)]) 321 # except EmptyValue: 322 # new_data.setlist(name, []) 327 else: 328 try: 329 #individual fields deal with None values themselves 330 new_data.setlist(name, [self.__class__.html2python(None)]) 331 except EmptyValue: 332 new_data.setlist(name, []) 333 334 335 def run_validator(self, new_data, validator): 336 if self.is_required or new_data.get(self.field_name, False) or hasattr(validator, 'always_test'): 337 if hasattr(self, 'requires_data_list'): 338 validator(new_data.getlist(self.field_name), new_data) 339 else: 340 validator(new_data.get(self.field_name, ''), new_data) 341 342 def get_validation_errors(self, new_data): 343 errors = {} 344 if self.is_required and not new_data.get(self.field_name, False): 345 errors.setdefault(self.field_name, []).append(gettext_lazy('This field is required.')) 346 return errors 347 try: 348 for validator in self.validator_list: 349 try: 350 self.run_validator(new_data, validator) 351 except validators.ValidationError, e: 352 errors.setdefault(self.field_name, []).extend(e.messages) 353 # If a CriticalValidationError is raised, ignore any other ValidationErrors 354 # for this particular field 355 except validators.CriticalValidationError, e: 356 errors.setdefault(self.field_name, []).extend(e.messages) 357 return errors 323 358 324 359 def get_id(self): django/branches/magic-removal/django/db/models/base.py
r1767 r1797 1 1 import django.db.models.manipulators 2 2 import django.db.models.manager 3 from django.db.models.fields import AutoField, ImageField 3 from django.db.models.fields import AutoField, ImageField, Admin 4 4 from django.db.models.fields.related import OneToOne, ManyToOne 5 5 from django.db.models.related import RelatedObject … … 21 21 from sets import Set as set 22 22 23 attribute_transforms = { }23 attribute_transforms = { 'Admin': lambda cls: Admin(**cls.__dict__) } 24 24 25 25 class ModelBase(type): django/branches/magic-removal/django/db/models/fields/__init__.py
r1780 r1797 727 727 728 728 def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True): 729 return [ HiddenField(name_prefix + self.name) ]729 return [formfields.HiddenField(name_prefix + self.name) ] 730 730 731 731 def contribute_to_class(self, cls, name): … … 820 820 new_fieldset_list.append(FieldSet(name, classes, opts.get_field, line_specs)) 821 821 return new_fieldset_list 822 823 def contribute_to_class(self, cls, name): 824 cls._meta.admin = self django/branches/magic-removal/django/db/models/manipulators.py
r1780 r1797 100 100 self.children[f] = manipulators 101 101 self.needs_deletion = False 102 self.ignore_errors = False 102 103 103 104 def get_fields(self): 104 if self.needs_deletion :105 if self.needs_deletion : 105 106 return [] 106 107 else: 107 l = list(self.fields_) 108 for child_manips in self.children.values(): 109 for manip in child_manips: 110 if manip: 111 l.extend(manip.fields) 112 return l 108 return self.fields_ 109 #l = list(self.fields_) 110 #for child_manips in self.children.values(): 111 # for manip in child_manips: 112 # if manip: 113 # l.extend(manip.fields) 114 #return l 113 115 114 116 fields = property(get_fields) 117 118 def get_validation_errors(self, new_data): 119 "Returns dictionary mapping field_names to error-message lists" 120 if self.needs_deletion or self.ignore_errors: 121 return {} 122 123 errors = super(AutomaticManipulator, self).get_validation_errors(new_data) 124 125 for manips in self.children.values(): 126 errors.update(manips.get_validation_errors(new_data)) 127 return errors 128 129 def do_html2python(self, new_data): 130 super(AutomaticManipulator, self).do_html2python(new_data) 131 for child in self.children.values(): 132 child.do_html2python(new_data) 115 133 116 134 def get_original_value(self, field): … … 359 377 for index, obj_data in items: 360 378 child_manip = self.add_child(index) 379 #HACK: this data will not have been converted to python form yet. 380 #child_manip.do_html2python(obj_data) 361 381 child_manip._fill_data(obj_data) 362 382 … … 385 405 # TODO: page.forward, page.back, page.n, swap.n.m 386 406 if command_name == "add": 387 self.add_child() 407 child_manip = self.add_child() 408 # Don't show validation stuff for things just added. 409 child_manip.ignore_errors = True 388 410 elif command_name == "swap": 389 411 order_field = self.model._meta.order_with_respect_to … … 418 440 prefix = '%s%s.' % (self.name_prefix, index ) 419 441 child_manip = man_class(self.follow, self.name_parts + ( str(index), ) ) 442 420 443 self[index] = child_manip 421 444 return child_manip … … 428 451 new_data.update(manip_data) 429 452 return new_data 453 454 def get_validation_errors(self, new_data): 455 "Returns dictionary mapping field_names to error-message lists" 456 errors = {} 457 for manip in self: 458 if manip: 459 errors.update(manip.get_validation_errors(new_data)) 460 return errors 461 462 def do_html2python(self, new_data): 463 print "coll: ", self 464 for manip in self: 465 if manip: 466 manip.do_html2python(new_data) 430 467 431 468 def manipulator_validator_unique_together(field_name_list, opts, self, field_data, all_data):
