معنی دقیق گزینه on_delete در قسمت مدل های فریمورک جانگو

سلام خدمت بچه های انجمن یلدا مبارک :heartbeat:
من میخواستم بیشتر راجع به گزینه on_delete در بخش مدل ها در جنگو بدونم.
اگه بخوام بیشتر توضیح بدم، فرض کنید همچین کدی رو داریم:

author = models.ForeignKey('auth.User',on_delete = models.CASCADE)

در کل میخوام بدونم که گزینه on_delete و CASCADE چه معنی دارن؟
تو داکیومنت جنگو چیز خوبی گیرم نیومد. ولی در کل فک کنم به این معنی میشه که وقتی این گزینه فعال باشه، اگه اون ابجکتمون حذف بشه(مثلا نویسنده) تمام پست های مربوط به اون نویسنده حذف خواهد شد؟
آها راستی اگه میشه یکم از گزینه های دیگه هم چیزی بنویسید که تکمیل تر بشه :laughing:

  • PROTECT
  • RESTRICT
  • SET_NULL
  • SET_DEFAULT
  • DO_NOTHING

سلام
ببین درواقع این مفاهیم برای دیتابیس ها و RDBMSهاست نه ORM جنگو. میخواد بدونه اگر یک سطری رو حذف کردی و idش توی جدول‌های دیگه کلید خارجی بود چیکار کنه دیتابیس؟ و بسته به نیاز هست(البته همین cascade معمولاً استفاده میشه). این الان یعنی بصورت آبشاری یا یکی پس از دیگری، سطرهایی از جدول‌های دیگه که کلید خارجی از id‌ این نویسنده دارن هم حذف میشه (و اونا هم که حذف میشن هم همینطور. مثلاً کامنت‌های نوشته هم پاک بشه و…). مثلا جدول «نوشته‌ها» اگر داشته باشی که کلید خارجی به نویسنده داشته باشه، با حذف یک نویسنده، سطرهای (نوشته‌ها) مربوط به اون نویسنده هم پاک میشه. اینطوری خیالت هم راحته که اگر نویسنده‌ای هم پاک بشه، نوشته بی‌نویسنده ایجاد نمیشه.
در سناریو دیگه، نوشته‌ها برات خیلی مهمه و حتی اگر نویسنده‌اش هم پاک شه یا گم شه، میخوای اون نوشته هم بمونه. حالت های دیگه هم همونطور که گفتی هست. مثلا اگر پاک شد، بجای idش یک مقدار پیشفرض (مثلا id ادمین) رو بذار، یا اگر idش جای دیگه کلید خارجی هست (مثلا نوشته‌ای داره)، نذار پاک شه کلاً! بقیه هم میتونی حدس بزنی… مثلا هیچ کاری لازم نیست بکنه و بقیه سطرها همونطور که بودن (با کلید خارجی که دیگه وجود نداره) بمونه… و…

2 Likes