"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن استخدام طريقة Django `select_dependent` لتحقيق تأثير الانضمام الداخلي عند العمل مع الجداول ذات الصلة؟

كيف يمكن استخدام طريقة Django `select_dependent` لتحقيق تأثير الانضمام الداخلي عند العمل مع الجداول ذات الصلة؟

تم النشر بتاريخ 2024-11-18
تصفح:919

How can Django\'s `select_related` method be used to achieve an inner join effect when working with related tables?

الانضمام الداخلي في جانغو: ربط الجداول ذات الصلة

لعرض البيانات من جداول متعددة مرتبطة في جانغو، غالبًا ما يكون الانضمام الداخلي ضروريًا. في هذه المقالة، سوف نستكشف كيفية إجراء صلة داخلية باستخدام Django's ORM (Object-Relational Mapper).

علاقات النماذج

النماذج.py في يحدد الكود المقدم علاقات الجدول التالية:

  • من بلد إلى دولة (مفتاح خارجي)
  • من دولة إلى مدينة (مفتاح خارجي)
  • النشر إلى بلد، دولة، و المدينة (المفاتيح الخارجية)

الانضمام الداخلي باستخدام Select_dependent

لتحقيق تأثير الانضمام الداخلي، يمكن استخدام طريقة Django's Select_dependent. فهو يحدد مسبقًا الكائنات ذات الصلة جنبًا إلى جنب مع الكائنات الأساسية، مما يقلل عدد استعلامات قاعدة البيانات المطلوبة للوصول إلى البيانات ذات الصلة.

في view.py، يمكن استخدام التعليمة البرمجية التالية لإجراء صلة داخلية:

pubs = publication.objects.select_related('country', 'country_state', 'city')

فحص SQL الذي تم إنشاؤه

باستخدام str(pubs.query)، يمكن فحص استعلام SQL الذي تم إنشاؤه. سيشبه استعلام SQL المقدم، مع صلات داخلية بين الجداول:

SELECT "publication"."id", "publication"."title", ..., "country"."country_name", ...  
FROM "publication" 
INNER JOIN "country" ON ( "publication"."country_id" = "country"."id" ) 
INNER JOIN "countrystate" ON ( "publication"."countrystate_id" = "countrystate"."id" ) 
INNER JOIN "city" ON ( "publication"."city_id" = "city"."id" ) 

الوصول إلى البيانات ذات الصلة

بعد الانضمام الداخلي، يمكن الوصول إلى البيانات ذات الصلة من خلال سمات كائن النموذج المعني. على سبيل المثال، لعرض اسم المدينة لكل منشور:

{% for p in pubs %}
     {{ p.city.city_name}}  # p.city has been populated in the initial query
     # ...
{% endfor %}

من خلال الاستفادة من الروابط الداخلية المحددة في Django، يمكن تنفيذها بكفاءة لاسترداد البيانات من الجداول ذات الصلة، وتقليل استعلامات قاعدة البيانات وتحسين الأداء.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3