mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-27 02:48:38 -06:00
Skip filters which do not specify a JSON-serializable value
This commit is contained in:
parent
9ee9cc71cd
commit
26efdde3cc
@ -360,16 +360,20 @@ class AttributeFiltersMixin:
|
|||||||
# Extract JSONField-based filters from the incoming data
|
# Extract JSONField-based filters from the incoming data
|
||||||
if data is not None:
|
if data is not None:
|
||||||
for key, value in data.items():
|
for key, value in data.items():
|
||||||
if key.startswith(self.attribute_filter_prefix):
|
if field := self._get_field_lookup(key):
|
||||||
# Attempt to cast the value to a native JSON type
|
# Attempt to cast the value to a native JSON type
|
||||||
try:
|
try:
|
||||||
value = json.loads(value)
|
self.attr_filters[field] = json.loads(value)
|
||||||
except (ValueError, json.JSONDecodeError):
|
except (ValueError, json.JSONDecodeError):
|
||||||
pass
|
pass
|
||||||
field = f'{self.attributes_field_name}__{key.split(self.attribute_filter_prefix, 1)[1]}'
|
|
||||||
self.attr_filters[field] = value
|
|
||||||
|
|
||||||
super().__init__(data=data, queryset=queryset, request=request, prefix=prefix)
|
super().__init__(data=data, queryset=queryset, request=request, prefix=prefix)
|
||||||
|
|
||||||
|
def _get_field_lookup(self, key):
|
||||||
|
if not key.startswith(self.attribute_filter_prefix):
|
||||||
|
return
|
||||||
|
lookup = key.split(self.attribute_filter_prefix, 1)[1] # Strip prefix
|
||||||
|
return f'{self.attributes_field_name}__{lookup}'
|
||||||
|
|
||||||
def filter_queryset(self, queryset):
|
def filter_queryset(self, queryset):
|
||||||
return super().filter_queryset(queryset).filter(**self.attr_filters)
|
return super().filter_queryset(queryset).filter(**self.attr_filters)
|
||||||
|
Loading…
Reference in New Issue
Block a user