select_related للمفاتيح الأجنبية
ضم الصفوف المرتبطة في استعلام واحد
select_related للمفاتيح الأجنبية درس مجاني في Django Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Django Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Django Academy 4 دروس في المجموع.
التعرّف إلى select_related
يخبر select_related Django بجلب الصفوف المرتبطة مسبقًا في الاستعلام نفسه، فتتوقف الحلقات عن إطلاق رحلات إضافية. ⚡
يستخدم JOIN
يضيف داخليًا عملية SQL من نوع JOIN، لجلب الكائن الأصلي وصفه المرتبط معًا في رحلة واحدة فعّالة.
الاستدعاء الأساسي
مرّروا اسم الحقل المرتبط إلى select_related في queryset، وسيُنفَّذ الربط تلقائيًا عند تحميل البيانات.
books = Book.objects.select_related('author')من 101 إلى 1
أصبح الآن تشغيل حلقة على تلك الكتب وقراءة مؤلف كل منها ينفذ استعلامًا واحدًا بدلًا من 101 استعلام. الكود نفسه، لكن النتيجة هائلة.
for book in books:
print(book.author.name)متى يناسب استخدامه
استخدموه مع حقول ForeignKey وOneToOne، حيث يشير كل كائن إلى صف مرتبط واحد بالضبط يمكن لجملة الربط جلبه.
ليس للعلاقات المتعددة
لا يعمل مع العلاقات many-to-many أو روابط one-to-many العكسية، لأن الربط لا يستطيع دمج صفوف كثيرة في نتيجة واحدة بطريقة نظيفة.
تتبّع السلسلة
يمكنكم عبور عدة مستويات باستخدام شرطتين سفليتين، وإجراء الربط عبر أكثر من مفتاح أجنبي في استعلام واحد.
Book.objects.select_related('author__publisher')عدة علاقات دفعة واحدة
مرّروا عدة أسماء حقول لجلب علاقات متعددة معًا، وكلها مدمجة في الاستعلام المحسّن نفسه.
Order.objects.select_related('customer', 'product')إنه كسول أيضًا
يظل الاستعلام منتظرًا حتى تستخدموا البيانات فعليًا، لذا يبقى تسلسل عمليات التصفية وorder_by قبله رخيصًا ومرنًا.
انتبهوا إلى اتساع النتيجة
تضيف عمليات الربط أعمدة، لذلك لا تختاروا أكثر مما يلزم. اجلبوا فقط العلاقات التي تقرؤونها فعلًا للحفاظ على خفة كل صف.
عادة تستحق البناء
هل ترون وصولًا إلى مفتاح أجنبي داخل حلقة؟ استخدموا select_related أولًا. وسرعان ما يصبح ذلك أمرًا تلقائيًا. 🎯
تحقق سريع
اختاروا الأداة المناسبة لهذه العلاقة.
مراجعة
يربط select_related بيانات ForeignKey وOneToOne في استعلام واحد، وينهي مشكلة N+1 في الروابط ذات الصف الواحد. اعبروا المستويات باستخدام شرطتين سفليتين. ✅
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «select_related للمفاتيح الأجنبية» مجاني؟
نعم — نص درس «select_related للمفاتيح الأجنبية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Django Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Django Academy 4 دروس في المجموع.
ماذا ستتعلم في «select_related للمفاتيح الأجنبية»؟
ضم الصفوف المرتبطة في استعلام واحد تتمرن على Django Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Django Academy؟
لا تُشترط خبرة سابقة. Django Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «select_related للمفاتيح الأجنبية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Django Academy هذا؟
نعم. كل درس في Django Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- اكتشاف مشكلة N+1
- select_related للمفاتيح الأجنبية
- prefetch_related لعلاقات M2M
- تحليل الأداء باستخدام Debug Toolbar