def get_queryset(self):
"""
Gets queryset for ListView to return to view
"""
# Filter by program (self.program set in test_func())
financial_aids = FinancialAid.objects.filter(
tier_program__program=self.program
)
# Filter by status
self.selected_status = self.kwargs.get("status", None)
if self.selected_status is None or self.selected_status not in FinancialAidStatus.ALL_STATUSES:
self.selected_status = self.default_status
financial_aids = financial_aids.filter(status=self.selected_status)
# Filter by search query
self.search_query = self.request.GET.get("search_query", "")
search_query = reduce(
lambda q, term: (
q |
Q(user__profile__first_name__icontains=term) |
Q(user__profile__last_name__icontains=term)
),
self.search_query.split(),
Q()
)
if search_query:
financial_aids = financial_aids.filter(search_query)
# Annotate with adjusted cost
self.course_price = self.program.price
financial_aids = financial_aids.annotate(adjusted_cost=self.course_price - F("tier_program__discount_amount"))
# Sort by field
self.sort_field = self.request.GET.get("sort_by", self.default_sort_field)
if self.sort_field.startswith("-"):
self.sort_field = self.sort_field[1:]
# Defined above: self.sort_direction = ""
self.sort_direction = "-"
if self.sort_field not in self.sort_fields:
self.sort_field = self.default_sort_field
self.sort_direction = ""
financial_aids = financial_aids.order_by(
"{sort_direction}{sort_field}".format(
sort_direction=self.sort_direction,
sort_field=self.sort_field_mappings.get(self.sort_field, self.sort_field)
)
)
return financial_aids
评论列表
文章目录