Django2 StackedConfigurationModel: Fix query filter
BOM-1432
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user