تخطَّ إلى المحتوى

only()

تحديد الحقول المطلوب جلبها فقط only()

only() تجلب فقط الحقول المذكورة من قاعدة البيانات (والباقي عند الوصول الفعلي له لاحقًا)، على عكس values() التي تُرجع قواميس بدل كائنات نموذج كاملة.

بخلاف values()، كائنات only() تبقى كائنات نموذج حقيقية (يمكن استدعاء methods عليها)، لكن الحقول غير المذكورة تُجلب بطلب إضافي منفصل فقط عند الوصول الفعلي لها — استخدام خاطئ قد يُسبّب استعلامات إضافية غير متوقّعة.

الصياغة

Model.objects.only("field1", "field2")

📄 مثال

# يجلب فقط title و slug بالاستعلام الأول
posts = Post.objects.only("title", "slug")
for post in posts:
    print(post.title)       # بلا استعلام إضافي
    print(post.content)     # استعلام إضافي منفصل لكل منشور — لم يُطلب مسبقًا

أهم المعاملات

المعاملالوظيفة
field1, field2...أسماء الحقول الوحيدة المطلوب جلبها بالاستعلام الأول

💡 نصائح عملية

  • استخدمها بقوائم كبيرة تعرض حقولًا محدودة فقط (عنوان وتاريخ)، لا محتوى كامل ثقيل

⚠️ أخطاء شائعة

  • الوصول لحقل لم يُذكر بـ only() داخل حلقة على نتيجة كبيرة — يُنتج استعلام SQL إضافي منفصل لكل سجل، نفس مشكلة N+1

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DJANGO الكامل بالعربي.