From a5c90913cc0221b260779a9a939268a334b8f3d1 Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Wed, 11 Oct 2017 23:46:35 -0400 Subject: [PATCH] Remove invalid field data when 'together' fails --- django_filters/filterset.py | 4 +++- tests/test_filterset.py | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/django_filters/filterset.py b/django_filters/filterset.py index 74df994f0..88a9eed24 100644 --- a/django_filters/filterset.py +++ b/django_filters/filterset.py @@ -74,7 +74,9 @@ def full_clean(form): for each in together: if not _together_valid(form, each): - return form.add_error(None, message % ','.join(each)) + form.add_error(None, message % ','.join(each)) + for field_name in each: + form.cleaned_data.pop(field_name, None) return full_clean diff --git a/tests/test_filterset.py b/tests/test_filterset.py index 0d543e7fc..e6bdc41aa 100644 --- a/tests/test_filterset.py +++ b/tests/test_filterset.py @@ -690,10 +690,15 @@ class Meta: fields = ['username', 'status'] together = ['username', 'status'] + # valid - neither field present, no filtering f = F({'username': '', 'status': ''}, queryset=self.qs) + self.assertTrue(f.is_valid()) self.assertEqual(f.qs.count(), 2) + + # invalid - both fields not present, no filtering f = F({'username': 'alex', 'status': ''}, queryset=self.qs) - self.assertEqual(f.qs.count(), 0) + self.assertFalse(f.is_valid()) + self.assertEqual(f.qs.count(), 2) # test filter.method here, as it depends on its parent FilterSet