با سلام و درود و امیدوارم ایام به کامی در این روز های گرم پایان بهار داشته باشید 🙂 سریع میرم سر اصل مطلب، قضیه از اینجا شروع شده که Djangoبعد از ورژن ۲.۰ برای ForeignKey دو آرگومان اجباری در نظر گرفت و اگر مثل سابق کد می زدید احتمالا با ارور زیر مواجه می شدید:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
پس در Django 2.0 برای فیلد ForeignKey باید از دو آرگومان ضروری استفاده کنیم :
- ۱- مدلی که میخواهیم بهش mapشیم
- ۲- آرگومان on_delete
و اما on_delete چیست ؟
ForeignKey.on_delete
¶
زمانی که شیئی که توسط ForeignKey بهش رفرنس داده ایم پاک می شود، Djangoمطابق با آرگومان on_delete رفتار خواهد کرد.
مقادیر ممکن برای on_delete
:
مقادیر ممکن در django.db.models
قابل دسترس هستند:
CASCADE
[source]
Django در این حالت، پس از حذف مرجع(رفرنس)، شیئی که آن کلید خارجی را داشته نیز پاک می کند.
PROTECT
[source]
اچاره پاک کردن مرجع (رفرنس) را با بلند کردن ProtectedError
که زیر کلاسی از django.db.IntegrityError
را نمی دهد.
SET_NULL
[source]
کلید خارجی را برابر با Null قرار می دهد، این حالت فقط زمانی ممکن است که Nullبرای با True باشد.
SET_DEFAULT
[source]
مقدار کلید خارجی را برابر با مقدار پیشفرض آن قرار می دهد. مقدار پیشفرض برای کلید خارجی باید تعریف شده باشد.
SET
()[source]
مقدار کلید خارجی را برابر با مقداری که set()می دهد قرار می دهد.
DO_NOTHING
[source]
عملی انجام نمی دهد. اگر بَکِند (backend) پایگاه داده شما مجبور به اجرای referential integrity باشد، این منجر به IntegrityError
خواهد شد. مگر شما به صورت دستی ON DELETE
در پایگاه داده اضافه کنید
ارسال پاسخ