diff options
| author | Joseph Kocherhans <joseph@jkocherhans.com> | 2010-02-02 00:41:28 +0000 |
|---|---|---|
| committer | Joseph Kocherhans <joseph@jkocherhans.com> | 2010-02-02 00:41:28 +0000 |
| commit | fbb42c31df691e3f83236ec8d3a25318ab759e87 (patch) | |
| tree | 1216614c71008db1f1fc6504ee362bf177f49524 /django | |
| parent | a0bae6ebb8105bfe649b21b001ab0b19dce59b2c (diff) | |
Fixed #12667. Added optgroup validation support to model fields with choices. Thanks ramiro.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12374 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/fields/__init__.py | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 29de8c7422..4a3405f3f0 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -1,16 +1,13 @@ import datetime import decimal -import os import re import time import django.utils.copycompat as copy from django.db import connection -from django.db.models import signals from django.db.models.fields.subclassing import LegacyConnection from django.db.models.query_utils import QueryWrapper -from django.dispatch import dispatcher from django.conf import settings from django import forms from django.core import exceptions, validators @@ -18,7 +15,7 @@ from django.utils.datastructures import DictWrapper from django.utils.functional import curry from django.utils.itercompat import tee from django.utils.text import capfirst -from django.utils.translation import ugettext_lazy as _, ugettext +from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import smart_unicode, force_unicode, smart_str from django.utils import datetime_safe @@ -198,8 +195,15 @@ class Field(object): # Skip validation for non-editable fields. return if self._choices and value: - if not value in dict(self.choices): - raise exceptions.ValidationError(self.error_messages['invalid_choice'] % value) + for option_key, option_value in self.choices: + if type(option_value) in (tuple, list): + # This is an optgroup, so look inside the group for options. + for optgroup_key, optgroup_value in option_value: + if value == optgroup_key: + return + elif value == option_key: + return + raise exceptions.ValidationError(self.error_messages['invalid_choice'] % value) if value is None and not self.null: raise exceptions.ValidationError(self.error_messages['null']) |
