From f7eea7769a3bc6be1eac34b7ac015422690b91e8 Mon Sep 17 00:00:00 2001 From: tyrael Date: Mon, 20 Jun 2016 02:16:37 +0800 Subject: [PATCH 1/2] Add param for all fields --- redisco/models/attributes.py | 7 +++++++ redisco/models/basetests.py | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/redisco/models/attributes.py b/redisco/models/attributes.py index c91c3ada0..91c9e04e7 100644 --- a/redisco/models/attributes.py +++ b/redisco/models/attributes.py @@ -40,12 +40,14 @@ def __init__(self, required=False, validator=None, unique=False, + choices=None, default=None): self.name = name self.indexed = indexed self.required = required self.validator = validator self.default = default + self.choices = choices self.unique = unique def __get__(self, instance, owner): @@ -100,6 +102,11 @@ def validate(self, instance): r = self.validator(self.name, val) if r: errors.extend(r) + # validate by choices + if self.choices: + if val is None or val not in self.choices: + errors.append( + (self.name, "should in choice: {}".format(self.choices))) if errors: raise FieldValidationError(errors) diff --git a/redisco/models/basetests.py b/redisco/models/basetests.py index 0c9de4a72..9e1aca166 100644 --- a/redisco/models/basetests.py +++ b/redisco/models/basetests.py @@ -14,7 +14,7 @@ class Person(models.Model): first_name = models.CharField(required=True) last_name = models.CharField() - active = models.BooleanField(default=False) + active = models.BooleanField(default=False) def full_name(self): return "%s %s" % (self.first_name, self.last_name,) @@ -396,6 +396,21 @@ class Person(models.Model): self.assertFalse(p.is_valid()) self.assertTrue(('name', 'required') in p.errors) + def test_choices(self): + class Person(models.Model): + name = models.CharField(required=True) + sex = models.CharField(choices=["Male", "Female"]) + p = Person(name="Tyrael", sex="Male") + self.assertTrue(p.is_valid()) + + p = Person(name="Tyrael") + self.assertFalse(p.is_valid()) + self.assertTrue(('sex', 'should in choice: ["Male", "Female"]')) + + p = Person(name="Tyrael", sex="Unknown") + self.assertFalse(p.is_valid()) + self.assertTrue(('sex', 'should in choice: ["Male", "Female"]')) + def test_errors(self): class Person(models.Model): name = models.CharField(required=True, unique=True) From b070a7bf5d92477dcd524687e505123eb033014e Mon Sep 17 00:00:00 2001 From: root Date: Mon, 20 Jun 2016 17:03:00 +0000 Subject: [PATCH 2/2] fix: python2.6 using {0} instead of {} --- redisco/models/attributes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redisco/models/attributes.py b/redisco/models/attributes.py index 91c9e04e7..697571317 100644 --- a/redisco/models/attributes.py +++ b/redisco/models/attributes.py @@ -106,7 +106,7 @@ def validate(self, instance): if self.choices: if val is None or val not in self.choices: errors.append( - (self.name, "should in choice: {}".format(self.choices))) + (self.name, "should in choice: {0}".format(self.choices))) if errors: raise FieldValidationError(errors)