27/11/2025
✅ Django ORM দিয়ে নির্দিষ্ট পরিমাণ ডাটা আনার সহজ ব্যাখ্যা**
🔹 1. কিভাবে লিমিট দিয়ে ডাটা আনবো?
✔ প্রথম ১০টি রেকর্ড
python
Order.objects.filter(status="pending").order_by('-created_at')[:10]
এটি ডাটাবেস থেকে শুধু প্রথম ১০টি pending order আনবে।
order_by('-created_at')` থাকায় newest → oldest দেখাবে।
✔ Offset দিয়ে (২০–৩০ নম্বর) রেকর্ড
python
Order.objects.filter(status="pending").order_by('-created_at')[20:30]
এটি **২০ নম্বর থেকে ৩০ নম্বর পর্যন্ত** (মোট ১০টি) রেকর্ড আনবে।
🔹 2. Django ভিতরে কীভাবে কাজটা করে?
Django পুরো টেবিল মেমরিতে তোলে না।
এটি SQL এ convert করে ঠিক নিচের মতো:
SELECT * FROM orders
WHERE status = 'pending'
ORDER BY created_at DESC
LIMIT 10 OFFSET 20;
অর্থাৎ:
LIMIT 10 → মাত্র ১০টি রেকর্ড নেবে
OFFSET 20 → ২০টি স্কিপ করে পরেরগুলো নেবে
🔰 **Database-level filtering হওয়ায় performance অনেক ভালো।**
🔹 3. কখন slice ব্যবহার করবো?
✔ Use Cases
* Pagination (page 1, 2, 3...)
* Dashboard এ limited data
* Homepage এ latest 5 items
* Very large table থেকে lightweight listing
* API response দ্রুত করতে
(যেমন: `/orders?limit=10&offset=20`)
❗ গুরুত্বপূর্ণ নোট
Slice ব্যবহার করার আগে **সবসময় `order_by()` দিন**।
কারণ order না দিলে Django guaranteed করে না কোন ১০টি রেকর্ড আসবে।
ডাটার sequence database-dependent হয়ে যায়।
Wrong (uncertain result):
python
Order.objects.all()[:10] # কোন ১০টা আসবে জানার উপায় নেই
Correct:
python
Order.objects.order_by('-created_at')[:10]