Как упростить код функции?

Задача: вернуть список заказов с опциональной передачей аргументов 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)]
Вернуться на верх