As the uniform all values approach has created a bit of confusion, let me present a larger example:
Validators in core.validators should not be concerned with either model or form internals if possible. This is currently straightforward to achieve by passing all values always as a dict via form.cleaned_data or model.__dict__.copy() (dict copying is cheap, the original instance dict is unsafe to pass around). This makes multi-field validators work uniformly for both models and fields. Otherwise you have to always handle identical validation differently for forms and models -- this is extremely smelly in my opinion. And now the example: class RequiredIfOtherFieldEquals(object): def __call__(self, value, all_values={}, instance=None): if self.other_field in all_values and all_values [self.other_field] == self.other_value and not value: raise ValidationError(self.error_message, REQUIRED) works both for forms and models with the proposed approach (all_values is model_instance.__dict__.copy() in model field validation case). Handling this specially for model instances would be really ugly: def __call__(self, value, all_values={}, instance=None): if instance is not None: if hasattr(self.other_field, instance) and getattr (self.other_field, instance) == self.other_value and not value: raise ValidationError(self.error_message, REQUIRED) elif self.other_field in all_values and all_values [self.other_field] == self.other_value and not value: raise ValidationError(self.error_message, REQUIRED) and entirely unnecessary under the all_values approach. Everybody is most welcome to prove me wrong :) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~----------~----~----~----~------~----~------~--~---