From d8d874d964a4f5face8cec3e38577975381d1909 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Fri, 17 Feb 2017 11:06:29 -0500 Subject: [PATCH 1/2] treat m2m fields as FK in filter python coercion --- awx/api/filters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/api/filters.py b/awx/api/filters.py index fc42a98c41..655bdb503d 100644 --- a/awx/api/filters.py +++ b/awx/api/filters.py @@ -9,7 +9,7 @@ from django.core.exceptions import FieldError, ValidationError from django.db import models from django.db.models import Q from django.db.models.fields import FieldDoesNotExist -from django.db.models.fields.related import ForeignObjectRel +from django.db.models.fields.related import ForeignObjectRel, ManyToManyField from django.contrib.contenttypes.models import ContentType from django.utils.encoding import force_text @@ -129,7 +129,7 @@ class FieldLookupBackend(BaseFilterBackend): return to_python_boolean(value, allow_none=True) elif isinstance(field, models.BooleanField): return to_python_boolean(value) - elif isinstance(field, ForeignObjectRel): + elif isinstance(field, (ForeignObjectRel, ManyToManyField)): return self.to_python_related(value) else: return field.to_python(value) From a57d8fe9fd70fbd04c8c8417c757b444c6e6b72c Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Mon, 20 Feb 2017 17:11:08 -0500 Subject: [PATCH 2/2] treat GFJ and FJ and M2M all the same for type in querystring --- awx/api/filters.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/awx/api/filters.py b/awx/api/filters.py index 655bdb503d..b196a383f0 100644 --- a/awx/api/filters.py +++ b/awx/api/filters.py @@ -11,6 +11,7 @@ from django.db.models import Q from django.db.models.fields import FieldDoesNotExist from django.db.models.fields.related import ForeignObjectRel, ManyToManyField from django.contrib.contenttypes.models import ContentType +from django.contrib.contenttypes.fields import GenericForeignKey from django.utils.encoding import force_text # Django REST Framework @@ -129,7 +130,7 @@ class FieldLookupBackend(BaseFilterBackend): return to_python_boolean(value, allow_none=True) elif isinstance(field, models.BooleanField): return to_python_boolean(value) - elif isinstance(field, (ForeignObjectRel, ManyToManyField)): + elif isinstance(field, (ForeignObjectRel, ManyToManyField, GenericForeignKey)): return self.to_python_related(value) else: return field.to_python(value)