Django2 StackedConfigurationModel: Fix query filter

BOM-1432
This commit is contained in:
Nimisha Asthagiri
2020-03-31 12:08:20 -04:00
parent 02392879b7
commit 5447e86307

View File

@@ -183,19 +183,20 @@ class StackedConfigurationModel(ConfigurationModel):
values = field_defaults.copy()
global_override_q = Q(site=None, org=None, org_course=None, course_id=None)
site_override_q = Q(site=site, org=None, org_course=None, course_id=None)
org_override_q = Q(site=None, org=org, org_course=None, course_id=None)
org_course_override_q = Q(site=None, org=None, org_course=org_course, course_id=None)
course_override_q = Q(site=None, org=None, org_course=None, course_id=course_key)
# Build a multi_filter_query that defaults to querying for the global-level setting and adds queries
# for the stacked-level settings when applicable.
# Note: Django2+ requires checking for 'isnull' rather than passing 'None' in the queries.
multi_filter_query = Q(site__isnull=True, org__isnull=True, org_course__isnull=True, course_id__isnull=True)
if site:
multi_filter_query |= Q(site=site, org__isnull=True, org_course__isnull=True, course_id__isnull=True)
if org:
multi_filter_query |= Q(site__isnull=True, org=org, org_course__isnull=True, course_id__isnull=True)
if org_course:
multi_filter_query |= Q(site__isnull=True, org__isnull=True, org_course=org_course, course_id__isnull=True)
if course_key:
multi_filter_query |= Q(site__isnull=True, org__isnull=True, org_course__isnull=True, course_id=course_key)
overrides = cls.objects.current_set().filter(
global_override_q |
site_override_q |
org_override_q |
org_course_override_q |
course_override_q
)
overrides = cls.objects.current_set().filter(multi_filter_query)
provenances = defaultdict(lambda: Provenance.default)
# We are sorting in python to avoid doing a filesort in the database for