mirror of
https://github.com/ansible/awx.git
synced 2026-03-19 09:57:33 -02:30
Rewrite type to polymorphic_ctype__model for certain filter requests
This commit is contained in:
@@ -89,7 +89,6 @@ class FieldLookupBackend(BaseFilterBackend):
|
|||||||
# sure user cannot query using objects he could not view.
|
# sure user cannot query using objects he could not view.
|
||||||
new_parts = []
|
new_parts = []
|
||||||
for n, name in enumerate(parts[:-1]):
|
for n, name in enumerate(parts[:-1]):
|
||||||
|
|
||||||
# HACK: Make project and inventory source filtering by old field names work for backwards compatibility.
|
# HACK: Make project and inventory source filtering by old field names work for backwards compatibility.
|
||||||
if model._meta.object_name in ('Project', 'InventorySource'):
|
if model._meta.object_name in ('Project', 'InventorySource'):
|
||||||
name = {
|
name = {
|
||||||
@@ -99,8 +98,11 @@ class FieldLookupBackend(BaseFilterBackend):
|
|||||||
'last_updated': 'last_job_run',
|
'last_updated': 'last_job_run',
|
||||||
}.get(name, name)
|
}.get(name, name)
|
||||||
|
|
||||||
new_parts.append(name)
|
if name == 'type' and 'polymorphic_ctype' in model._meta.get_all_field_names():
|
||||||
|
name = 'polymorphic_ctype'
|
||||||
|
new_parts.append('polymorphic_ctype__model')
|
||||||
|
else:
|
||||||
|
new_parts.append(name)
|
||||||
|
|
||||||
if name in getattr(model, 'PASSWORD_FIELDS', ()):
|
if name in getattr(model, 'PASSWORD_FIELDS', ()):
|
||||||
raise PermissionDenied('Filtering on password fields is not allowed.')
|
raise PermissionDenied('Filtering on password fields is not allowed.')
|
||||||
@@ -134,6 +136,13 @@ class FieldLookupBackend(BaseFilterBackend):
|
|||||||
|
|
||||||
def value_to_python(self, model, lookup, value):
|
def value_to_python(self, model, lookup, value):
|
||||||
field, new_lookup = self.get_field_from_lookup(model, lookup)
|
field, new_lookup = self.get_field_from_lookup(model, lookup)
|
||||||
|
|
||||||
|
# Type names are stored without underscores internally, but are presented and
|
||||||
|
# and serialized over the API containing underscores so we remove `_`
|
||||||
|
# for polymorphic_ctype__model lookups.
|
||||||
|
if new_lookup.startswith('polymorphic_ctype__model'):
|
||||||
|
value = value.replace('_','')
|
||||||
|
|
||||||
if new_lookup.endswith('__isnull'):
|
if new_lookup.endswith('__isnull'):
|
||||||
value = to_python_boolean(value)
|
value = to_python_boolean(value)
|
||||||
elif new_lookup.endswith('__in'):
|
elif new_lookup.endswith('__in'):
|
||||||
|
|||||||
Reference in New Issue
Block a user