def test_set_model_changes_choices(self): class ModelA(models.Model): FIELD_CHOICES = [('foo', 'Foo'), ('bar', 'Bar')] class ModelB(models.Model): FIELD_CHOICES = [('baz', 'Baz'), ('qux', 'Qux')] f = LazyChoiceField(model=ModelA, choices_name='FIELD_CHOICES') self.assertEqual([('', '---------'), ('foo', 'Foo'), ('bar', 'Bar')], f.choices) f.model = ModelB self.assertEqual([('', '---------'), ('baz', 'Baz'), ('qux', 'Qux')], f.choices)
def test_not_required(self): class Model(models.Model): FIELD_CHOICES = [('foo', 'Foo'), ('bar', 'Bar')] f = LazyChoiceField(model=Model, choices_name='FIELD_CHOICES', required=False) self.assertEqual('', f.clean('')) self.assertEqual('', f.clean(None)) self.assertEqual('foo', f.clean('foo')) self.assertRaisesMessage( ValidationError, "'Select a valid choice. abcd is not one of the available choices.'", f.clean, 'abcd', )
def test_change_model_after_init(self): class ModelA(models.Model): FIELD_CHOICES = [('foo', 'Foo'), ('bar', 'Bar')] class ModelB(models.Model): FIELD_CHOICES = [('baz', 'Baz'), ('qux', 'Qux')] f = LazyChoiceField(model=ModelA, choices_name='FIELD_CHOICES') f.model = ModelB self.assertEqual('baz', f.clean('baz')) self.assertRaisesMessage( ValidationError, 'Select a valid choice. foo is not one of the available choices.', f.clean, 'foo', )
def test_with_optgroup(self): class Model(models.Model): FIELD_CHOICES = [ (1, [('foo', 'Foo'), ('bar', 'Bar')]), (2, [('baz', 'Baz'), ('qux', 'Qux')]), ('other', 'Other'), ] f = LazyChoiceField(model=Model, choices_name='FIELD_CHOICES') self.assertEqual('foo', f.clean('foo')) self.assertEqual('baz', f.clean('baz')) self.assertEqual('other', f.clean('other')) self.assertRaisesMessage( ValidationError, "'Select a valid choice. invalid is not one of the available choices.'", f.clean, 'invalid', )