def get_queryset(self):
only_valid = self.request.query_params.get('only_valid', '')
only_valid = only_valid == 'true'
user = self.request.user
try:
queryset = user.parent.coupon_set.all()
except exceptions.ObjectDoesNotExist:
raise PermissionDenied(detail='Role incorrect')
now = timezone.now()
out_time = models.Coupon.OUT_OF_DATE_TIME
if only_valid:
# ??????????
# ????, ????? => ?????, ???????????
queryset = queryset.filter(
expired_at__gt=now,
used=False,
).order_by('-amount', 'expired_at')
else:
# ??????????, ???????
# ????, ????? => ?????
queryset = queryset.filter(
expired_at__gt=now - out_time,
).extra(
# ???????????????
select={'date_diff': 'abs(extract(epoch from (now()-expired_at)))'}
).order_by('date_diff', '-amount')
# ???????
if self.action == 'list':
return sorted(queryset, key=lambda x: x.sort_key())
return queryset
评论列表
文章目录