Ticket #14410: diff_svn_r13540

File diff_svn_r13540, 1.6 KB (added by tangc, 14 years ago)
Line 
1diff -r 3f91fa6ba472 db/models/fields/__init__.py
2--- a/db/models/fields/__init__.py Wed Jul 07 17:22:15 2010 -0400
3+++ b/db/models/fields/__init__.py Wed Oct 06 12:41:37 2010 -0400
4@@ -168,15 +168,25 @@
5 # Skip validation for non-editable fields.
6 return
7 if self._choices and value:
8+ choices_dict = dict()
9 for option_key, option_value in self.choices:
10 if isinstance(option_value, (list, tuple)):
11 # This is an optgroup, so look inside the group for options.
12 for optgroup_key, optgroup_value in option_value:
13- if value == optgroup_key:
14- return
15- elif value == option_key:
16- return
17- raise exceptions.ValidationError(self.error_messages['invalid_choice'] % value)
18+ choices_dict.update({optgroup_key : optgroup_value})
19+ else:
20+ choices_dict.update({option_key : option_value})
21+ _value = value
22+ if not isinstance(value, (list, tuple)):
23+ _value = [value]
24+ invalid_v = []
25+ for v in _value:
26+ if not choices_dict.has_key(v):
27+ invalid_v.append(v)
28+ if invalid_v.__len__() > 0:
29+ raise exceptions.ValidationError(self.error_messages['invalid_choice'] % invalid_v)
30+ else:
31+ return
32
33 if value is None and not self.null:
34 raise exceptions.ValidationError(self.error_messages['null'])
Back to Top