Amer Abdallah نشر 25 أغسطس 2021 أرسل تقرير نشر 25 أغسطس 2021 أنا أتعلم Django في الوقت الحالي، وقد لاحظت مؤخرًا وجود خيار on_delete = Models.CASCADE في النماذج. لقد بحثت في توثيق جانغو Django، لكن لم أتوصل إلى أي شرح مفيد. ماذا يكون هذا الخيار وما فائدته؟ وهل هناك خيارات أخرى مثله؟ وأين توجد وثائق هذا الخيار؟ 2 اقتباس
1 سامح أشرف نشر 25 أغسطس 2021 أرسل تقرير نشر 25 أغسطس 2021 في لغة SQL يُعد هذا هو السلوك الذي يجب اعتماده عند حذف الكائن المشار إليه. وهذه ليست خاصة في Django نفسه. بل هو جزء من SQL. يتم استخدام on_delete لإخبار Django بما يجب فعله مع النموذج التي تعتمد على كائنات أخرى الذي قمت بحذفه. (على سبيل المثال، علاقة ForeignKey)، مثلًا المنشور الواحد في مدونة ما قد يكون له علاقة ForeignKey مع جدول comments لعرض التعليقات الخاصة بمنشور معين، وهذه الخاصية هي التي تحدد ما الذي سيحدث في حالة حذف المنشور، هل سيتم حذف التعليقات أم إبقائها أم ربما تريد إظهار خطأ يمنعك من حذف أي منشور لديه تعليقات عن طريق الخطأ. وهناك سبعة إجراءات يمكن اتخاذها عند وقوع مثل هذا الحدث (أي عند حذف كائن من جدول ما): CASCADE: عند حذف الكائن المشار إليه، احذف أيضًا الكائنات التي لها مراجع (عندما تقوم بإزالة منشور من مدونة ما على سبيل المثال، قد ترغب في حذف التعليقات الخاصة بهذا المنشور أيضًا).في لغة SQL يتم إستعمال كلمة CASCADE PROTECT: منع حذف الكائن المشار إليه (إن كان هناك أي إشارات له من كائنات أخرى). ولحذفه، سيتعين عليك حذف جميع الكائنات التي تشير إليه يدويًا، في لغة SQL يتم إستعمال كلمة RESTRICT RESTRICT: (تم إضافتها في الإصدار 3.1 من Django)، تشبه الخيار السابق، ولكنها تتبع معيار لغة SQL بشكل أدق، وفي حالة حدوث خطأ يتم عرض خطأ من نوع RestrictedError ، بخلاف PROTECT، تسمح بحذف الكائن المشار إليه إذا كان يشير أيضًا إلى كائن مختلف يتم حذفه في نفس العملية، ولكن عبر علاقة CASCADE. SET_NULL: يتم تعيّن المرجع إلى NULL (يتطلب أن يكون الحقل nullable أي أن قيمة null تساوي True). على سبيل المثال، عندما تحذف مستخدمًا، قد ترغب في الاحتفاظ بالتعليقات التي نشرها في منشورات المدونة، ويتم عرض التعليقات من قِبل مستخدم مجهول أو تم حذفه. في لغة SQL يتم إستعمال كلمة SET NULL SET_DEFAULT: يقوم بتعيين القيمة الافتراضية default. في لغة SQL يتم إستعمال كلمة SET DEFAULT SET(): تقوم بتعيين قيمة معينة. هذا ليس جزءًا من معيار SQL ويتم التعامل معه بالكامل بواسطة Django فقط، وهنا مثال لكيفية إستخدامها من توثيق Django الرسمي: from django.conf import settings from django.contrib.auth import get_user_model from django.db import models def get_sentinel_user(): return get_user_model().objects.get_or_create(username='deleted')[0] class MyModel(models.Model): user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET(get_sentinel_user), ) DO_NOTHING: يتم إستخدامها للإشارة إلى كائن غير موجود بالفعل، وقد تسبب الكثير من المشاكل في قاعدة البيانات مما ينتج عنه مشاكل وأخطاء تظهر للمستخدمين، في لغة SQL يتم إستعمال NO ACTION يمكنك الوصول إلى توثيق كل الخيارات السابقة في وثائق Django من هنا. في أغلب الحالات، CASCADE هو الخيار الأكثر إستخدامًا، ولكن بالنسبة لكل مفتاح ForeignKey، يجب أن تسأل نفسك دائمًا ما هو السلوك المتوقع في هذا الموقف. أحيانًا ما يكون PROTECT و SET_NULL مفيدًا في بعض الحالات. تحتوي الأكاديمية على مقالة (النماذج Models والاستعلام عن البيانات في Django) تمكنك من تجهيز وإعداد نماذج في Django وتتضمن أيضًا عمل علاقة ForeignKey بين النماذج. 4 اقتباس
السؤال
Amer Abdallah
أنا أتعلم Django في الوقت الحالي، وقد لاحظت مؤخرًا وجود خيار on_delete = Models.CASCADE في النماذج. لقد بحثت في توثيق جانغو Django، لكن لم أتوصل إلى أي شرح مفيد.
ماذا يكون هذا الخيار وما فائدته؟ وهل هناك خيارات أخرى مثله؟ وأين توجد وثائق هذا الخيار؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.