[Django]-Specifying limit and offset in Django QuerySet wont work

34đź‘Ť

âś…

It happens when you make queries from the shell – the LIMIT clause is added to stop your terminal filling up with thousands of records when debugging:

You were printing (or, at least, trying to print) the repr() of the
queryset. To avoid people accidentally trying to retrieve and print a
million results, we (well, I) changed that to only retrieve and print
the first 20 results and print “remainder truncated” if there were more.
This is achieved by limiting the query to 21 results (if there are 21
results there are more than 20, so we print the “truncated” message).
That only happens in the repr() — i.e. it’s only for diagnostic
printing. No normal user code has this limit included automatically, so
you happily create a queryset that iterates over a million results.

(Source)

👤akxlr

37đź‘Ť

Django implements OFFSET using Python’s array-slicing syntax. If you want to offset the first 10 elements and then show the next 5 elements then use it

MyModel.objects.all()[OFFSET:OFFSET+LIMIT]

For example if you wanted to check 5 authors after an offset of 10 then your code would look something like this:

Author.objects.all()[10:15]

You can read more about it here in the official Django doc

I have also written a blog around this concept, you can here more here

👤Arghya Saha

    5đź‘Ť

    The LIMIT and OFFSET doesn’t work in the same way in Django, the way we expect it to work.

    For example.

    If we have to read next 10 rows starting from 10th row and if we specify :

    Author.objects.all()[10:10]
    

    It will return the empty record list. In order to fetch the next 10 rows, we have to add the offset to the limit.

    Author.objects.all()[10:10+10]
    

    And it will return the record list of next 10 rows starting from the 10th row.

    👤Shakir Baba

      3đź‘Ť

      for offset and limit i used and worked for me 🙂

      MyModel.objects.all()[offset:limit]
      

      for exapmle:-

      Post.objects.filter(Post_type=typeId)[1:1]
      
      👤jayant singh

        1đź‘Ť

        I does work, but django uses an iterator. It does not load all objects at once.

        👤guettli

          Leave a comment