- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 45
 
Open
Description
We've found that QuerySelectMultipleField sometimes has funny validation behaviour. When choosing a non-existing value and validating, we get that form.validate() returns True, but then validating again it returns False.
The problem seems to be in pre_validate  that _invalid_formdata is not updated if _get_data is not called. So a fix to this would be:
    def pre_validate(self, form):
        data = self.data
        if self._invalid_formdata:
            raise ValidationError(self.gettext('Not a valid choice'))
        elif data:
            obj_list = list(x[1] for x in self._get_object_list())
            for v in self.data:
                if v not in obj_list:
                    raise ValidationError(self.gettext('Not a valid choice')) And a test (in QuerySelectMultipleFieldTest) that now fails, but would pass with the fix:
    def test_validate_nonexisting_value(self):
        form = self.F(DummyPostData(a=['3']))
        form.a.query = self.sess.query(self.Test)
        self.assertFalse(form.validate())vidya-gitaa
Metadata
Metadata
Assignees
Labels
No labels