mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-26 18:38: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
|
||||
if data is not None:
|
||||
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
|
||||
try:
|
||||
value = json.loads(value)
|
||||
self.attr_filters[field] = json.loads(value)
|
||||
except (ValueError, json.JSONDecodeError):
|
||||
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)
|
||||
|
||||
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):
|
||||
return super().filter_queryset(queryset).filter(**self.attr_filters)
|
||||
|
Loading…
Reference in New Issue
Block a user