Up to now the validation/cleaning of a attribute can not access the value of an other attribute.
The work around is to override the clean() method of the form/model. A team mate and I talked about it, and we asked ourself, if a two phase cleaning would help here. Our idea: - The first clean phase works like the current implementation - The second clean phase is optional and does nothing except the user implements it. - In the second clean phase your are allowed to peek into the results of the first clean phase. The clean method for the second phase would need to get the other values passed in. I would like to have this on model level, not only for forms. Example: class Issue(models.Model): state=models.CharField(choices=[('in_progress', 'In progress'), ('wait_until_due_date', 'Wait until due date')]) due_date=models.DateField(null=True) We want to implement this constraint: - due date must be set, if the state is "wait_until_due_date". - due date must not be set, if state is different from "wait_until_due_date". We know that we can use the clean() method of the model, but a field based solution would be more preferred. class Issue(models.Model): state = models.CharField(choices=[('in_progress', 'In progress'), ('wait_until_due_date', 'Wait until due date')]) due_date = models.DateField(null=True, validators2=[check_state_and_due_date_match]) def check_state_and_due_date_match(due_date, all_fields): state = all_fields['state'] if due_date: if state != 'wait_until_due_date': raise ValidationError('If due date is set, state must be "wait_until_due_date"') return if state != 'wait_until_due_date': raise ValidationError('If no due date is set, state must be "wait_until_due_date") Open questions: I am unsure if this should be used only for validation, or if it should be possible to alter values, too. What do you think? Other solutions or improvements? Regards, Thomas Güttler -- Thomas Güttler http://thomas-guettler.de/ -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at http://groups.google.com/group/django-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/551281DD.5080700%40tbz-pariv.de. For more options, visit https://groups.google.com/d/optout.