From ad6d4f892d5e2f113fa09528dd32f30fc0168313 Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 28 Sep 2022 15:57:13 -0700 Subject: [PATCH] 10348 fix tests --- netbox/extras/tests/test_customfields.py | 11 ++++++----- netbox/netbox/filtersets.py | 3 ++- netbox/utilities/filters.py | 8 ++++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/netbox/extras/tests/test_customfields.py b/netbox/extras/tests/test_customfields.py index 2754cf1bf..f73dce485 100644 --- a/netbox/extras/tests/test_customfields.py +++ b/netbox/extras/tests/test_customfields.py @@ -1161,7 +1161,7 @@ class CustomFieldModelFilterTest(TestCase): 'cf9': ['A', 'X'], 'cf10': manufacturers[0].pk, 'cf11': [manufacturers[0].pk, manufacturers[3].pk], - 'cf12': 100.25, + 'cf12': decimal.Decimal(100.25), }), Site(name='Site 2', slug='site-2', custom_field_data={ 'cf1': 200, @@ -1175,7 +1175,7 @@ class CustomFieldModelFilterTest(TestCase): 'cf9': ['B', 'X'], 'cf10': manufacturers[1].pk, 'cf11': [manufacturers[1].pk, manufacturers[3].pk], - 'cf12': 200.25, + 'cf12': decimal.Decimal(200.25), }), Site(name='Site 3', slug='site-3', custom_field_data={ 'cf1': 300, @@ -1189,7 +1189,7 @@ class CustomFieldModelFilterTest(TestCase): 'cf9': ['C', 'X'], 'cf10': manufacturers[2].pk, 'cf11': [manufacturers[2].pk, manufacturers[3].pk], - 'cf12': 300.25, + 'cf12': decimal.Decimal("300.25"), }), ]) @@ -1202,8 +1202,9 @@ class CustomFieldModelFilterTest(TestCase): self.assertEqual(self.filterset({'cf_cf1__lte': [200]}, self.queryset).qs.count(), 2) def test_filter_decimal(self): - self.assertEqual(self.filterset({'cf_cf12': [100.25, 200.25]}, self.queryset).qs.count(), 3) - self.assertEqual(self.filterset({'cf_cf12__n': [200.25]}, self.queryset).qs.count(), 3) + self.assertEqual(self.filterset({'cf_cf12__gt': [200.25]}, self.queryset).qs.count(), 1) + self.assertEqual(self.filterset({'cf_cf12': [100.25, 200.25]}, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset({'cf_cf12__n': [200.25]}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf12__gt': [200.25]}, self.queryset).qs.count(), 1) self.assertEqual(self.filterset({'cf_cf12__gte': [200.25]}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf12__lt': [200.25]}, self.queryset).qs.count(), 1) diff --git a/netbox/netbox/filtersets.py b/netbox/netbox/filtersets.py index b6776e3c1..6a8f5d0d3 100644 --- a/netbox/netbox/filtersets.py +++ b/netbox/netbox/filtersets.py @@ -46,7 +46,7 @@ class BaseFilterSet(django_filters.FilterSet): 'filter_class': filters.MultiValueDateTimeFilter }, models.DecimalField: { - 'filter_class': filters.MultiValueNumberFilter + 'filter_class': filters.MultiValueDecimalFilter }, models.EmailField: { 'filter_class': filters.MultiValueCharFilter @@ -95,6 +95,7 @@ class BaseFilterSet(django_filters.FilterSet): filters.MultiValueDateFilter, filters.MultiValueDateTimeFilter, filters.MultiValueNumberFilter, + filters.MultiValueDecimalFilter, filters.MultiValueTimeFilter )): return FILTER_NUMERIC_BASED_LOOKUP_MAP diff --git a/netbox/utilities/filters.py b/netbox/utilities/filters.py index f73b6dacc..0c0c4bd05 100644 --- a/netbox/utilities/filters.py +++ b/netbox/utilities/filters.py @@ -23,6 +23,14 @@ def multivalue_field_factory(field_class): field.to_python(v) for v in value if v ] + def run_validators(self, value): + for v in value: + super().run_validators(v) + + def validate(self, value): + for v in value: + super().validate(v) + return type(f'MultiValue{field_class.__name__}', (NewField,), dict())