From bf836d4d463188ac1ccf384b01a9e7127c8f52ea Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 9 Nov 2020 15:58:59 -0500 Subject: [PATCH] Fixes #5331: Fix filtering of sites by null region --- docs/release-notes/version-2.9.md | 1 + netbox/utilities/filters.py | 5 ++--- netbox/utilities/tests/test_filters.py | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/release-notes/version-2.9.md b/docs/release-notes/version-2.9.md index fe36b010e..eee056dbb 100644 --- a/docs/release-notes/version-2.9.md +++ b/docs/release-notes/version-2.9.md @@ -12,6 +12,7 @@ * [#5271](https://github.com/netbox-community/netbox/issues/5271) - Fix auto-population of region field when editing a device * [#5314](https://github.com/netbox-community/netbox/issues/5314) - Fix config context rendering when multiple tags are assigned to an object * [#5324](https://github.com/netbox-community/netbox/issues/5324) - Add missing template extension tags for plugins for VM interface view +* [#5331](https://github.com/netbox-community/netbox/issues/5331) - Fix filtering of sites by null region --- diff --git a/netbox/utilities/filters.py b/netbox/utilities/filters.py index f628ca917..18eeab7d2 100644 --- a/netbox/utilities/filters.py +++ b/netbox/utilities/filters.py @@ -68,11 +68,10 @@ class TreeNodeMultipleChoiceFilter(django_filters.ModelMultipleChoiceFilter): """ Filters for a set of Models, including all descendant models within a Tree. Example: [,] """ - def get_filter_predicate(self, v): - # null value filtering + # Null value filtering if v is None: - return {self.field_name.replace('in', 'isnull'): True} + return {f"{self.field_name}__isnull": True} return super().get_filter_predicate(v) def filter(self, qs, value): diff --git a/netbox/utilities/tests/test_filters.py b/netbox/utilities/tests/test_filters.py index f70d7e1db..56eaabd4c 100644 --- a/netbox/utilities/tests/test_filters.py +++ b/netbox/utilities/tests/test_filters.py @@ -23,7 +23,8 @@ class TreeNodeMultipleChoiceFilterTest(TestCase): class SiteFilterSet(django_filters.FilterSet): region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), - field_name='region__in', + field_name='region', + lookup_expr='in', to_field_name='slug', )