Как упростить код функции?
Задача: вернуть список заказов с опциональной передачей аргументов limit
(это максимум сколько записей вернуть), и offset
(это сколько сместить с начала)
Вот мой код, он работает, но мне кажется можно записать попроще, но не приходит в голову, как?
Основная проблема в том, что их могут и не передать, или передать только один, поэтому приходится каждый случай портянками обрабатывать...
def get_queryset(self):
limit = self.request.query_params.get('LIMIT')
offset = self.request.query_params.get('OFFSET')
limit = int(limit) if limit else None
offset = int(offset) if offset else None
if limit and offset:
return Orders.objects.all()[offset:offset+limit]
if limit:
return Orders.objects.all()[:limit]
if offset:
return Orders.objects.all()[offset:]
return Orders.objects.all()
Для наглядности
data = [1, 2, 3, 4, 5]
offset = 3
limit = 2
data[(offset or 0):(offset or 0)+(limit or 0)]
# [4, 5]
В вашем случае
def get_queryset(self):
# Можно так если отсутствие лимита означает максимальный лимит
# (При наличии большого набора данных может быть тяжко)
# limit = int(self.request.query_params.get('LIMIT', len(Orders.objects.all())))
# Или так. Если считать отсутствие лимита как то, что его забыли указать
limit = int(self.request.query_params.get('LIMIT', 0))
offset = int(self.request.query_params.get('OFFSET', 0))
return Orders.objects.all()[offset: offset + abs(limit)]