{"id":700,"date":"2019-01-23T21:43:33","date_gmt":"2019-01-23T12:43:33","guid":{"rendered":"https:\/\/www.nblog09.com\/w\/?p=700"},"modified":"2021-11-11T17:32:49","modified_gmt":"2021-11-11T08:32:49","slug":"django_on_delete","status":"publish","type":"post","link":"https:\/\/www.nblog09.com\/w\/2019\/01\/23\/django_on_delete\/","title":{"rendered":"django\u306e\u5916\u90e8\u30ad\u30fc\u3067\u6307\u5b9a\u3059\u308bon_delete\u306e\u30d1\u30e9\u30e1\u30fc\u30bf(PROTECT, SET_NULL, SET_DEFAULT, RESTRICT)\u307e\u3068\u3081"},"content":{"rendered":"<h2 class=\"title-border\">Django2\u7cfb\u4ee5\u964d\u306emodels.py\u304b\u3089\u5fc5\u9808\u306b\u306a\u3063\u305fon_delete\u306b\u3064\u3044\u3066<\/h2>\n<p>Django\u3067\u306f\u30012.0\u4ee5\u964d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3059\u308b\u969b\u306b\u3001<span class=\"pink_span\">on_delete\u3068\u3044\u3046\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u5fc5\u9808\u306b\u306a\u3063\u305f\u3002<\/span><\/p>\n<p>on_delete\u3068\u3044\u3046\u306e\u306f\u3001model\u306eForeignKey\u3067\u5916\u90e8\u30ad\u30fc\u3092\u4f5c\u6210\u3059\u308b\u969b\u306b\u6307\u5b9a\u3057\u3001\u63a5\u7d9a\u5148\u306e\u30c6\u30fc\u30d6\u30eb\u306e\u30ec\u30b3\u30fc\u30c9\u304c\u524a\u9664\u3055\u308c\u305f\u5834\u5408\u306b\u3001<span class=\"pink_span\">\u63a5\u7d9a\u5143\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u3069\u3046\u3059\u308b\u306e\u304b(\u524a\u9664\u3059\u308b\u306e\u304b\u6b8b\u3059\u306e\u304b)\u6c7a\u3081\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u3042\u308b\u3002<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/1-5.png\" alt=\"\" width=\"727\" height=\"436\" class=\"alignnone size-full wp-image-2489\" srcset=\"https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/1-5.png 727w, https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/1-5-300x180.png 300w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/p>\n<p><span style=\"text-decoration: underline;\">on_delete\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001models.py\u306e\u8a2d\u5b9a\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a18\u8f09\u3059\u308b\u3002<\/span><\/p>\n<div class=\"programming-gray\">\n<h4>Example<\/h4>\n<ul>\n<li>models.py\u3067\u3001ForeignKey\u3092\u4f5c\u6210<\/li>\n<\/ul>\n<div class=\"programming-inside\">\nfrom django.db import models<\/p>\n<p>class Model1(models.Model):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;model2 = models.ForeignKey(Model2, <span class=\"codehighlight\">on_delete=models.CASCADE<\/span>) <strong># CASCADE\u306e\u5834\u5408\u306b\u306f\u3001\u5916\u90e8\u30ec\u30b3\u30fc\u30c9\u3092\u524a\u9664\u3057\u305f\u5834\u5408\u306b\u30ec\u30b3\u30fc\u30c9\u306f\u81ea\u52d5\u524a\u9664\u3055\u308c\u308b<\/strong><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;date = models.DateField()\n<\/div>\n<\/div>\n<div class=\"customized-adsense\"><\/div>\n<h2 class=\"title-border\">on_delete\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u4e00\u89a7<\/h2>\n<ul>\n<li>on_delete\u30aa\u30d7\u30b7\u30e7\u30f3\u4e00\u89a7\u3068\u5404\u610f\u5473<\/li>\n<\/ul>\n<table>\n<thead>\n<tr class=\"table-tr\">\n<th>\u30aa\u30d7\u30b7\u30e7\u30f3<\/th>\n<th>\u610f\u5473<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"table-td\">CASCADE<\/td>\n<td>ForeignKey\u306e\u5bfe\u8c61\u30ec\u30b3\u30fc\u30c9\u304c\u524a\u9664\u3055\u308c\u308b\u3068\u3001\u7d10\u3065\u3051\u5143\u306e\u30ec\u30b3\u30fc\u30c9\u304c<span class=\"pink_span\">\u5168\u3066\u524a\u9664\u3055\u308c\u308b<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"table-td\">PROTECT<\/td>\n<td>ForeignKey\u306e\u5bfe\u8c61\u30ec\u30b3\u30fc\u30c9\u304c\u524a\u9664\u3057\u3088\u3046\u3068\u3057\u3066\u3082\u3001PrortectedError\u304c\u767a\u751f\u3057\u3066<span class=\"pink_span\">\u524a\u9664\u3055\u308c\u306a\u3044<\/span><\/td>\n<\/tr>\n<tr style=\"height: 53px;\">\n<td class=\"table-td\">SET_NULL<\/td>\n<td>ForeignKey\u306e\u5bfe\u8c61\u30ec\u30b3\u30fc\u30c9\u304c\u524a\u9664\u3055\u308c\u308b\u3068\u3001\u7d10\u3065\u3051\u5143\u306e\u30ec\u30b3\u30fc\u30c9\u306b\u306f<span class=\"pink_span\">null<\/span>\u304c\u8a2d\u5b9a\u3055\u308c\u308b\u3002\u307e\u305f\u3053\u308c\u306f\u3001<span class=\"pink_span\">null=True<\/span>\u3068\u8a2d\u5b9a\u3057\u3066\u5229\u7528\u3057\u306a\u3051\u308c\u3070\u3044\u3051\u306a\u3044<\/td>\n<\/tr>\n<tr style=\"height: 18px;\">\n<td class=\"table-td\">SET_DEFAULT<\/td>\n<td>ForeignKey\u306e\u5bfe\u8c61\u30ec\u30b3\u30fc\u30c9\u304c\u524a\u9664\u3055\u308c\u308b\u3068\u3001ForeignKey\u306b\u306f<span class=\"pink_span\">\u30c7\u30d5\u30a9\u30eb\u30c8\u5024<\/span>\u304c\u8a2d\u5b9a\u3055\u308c\u308b\u3002\u307e\u305f\u3053\u308c\u306f\u3001\u30e2\u30c7\u30eb\u306b<span class=\"pink_span\">default=<\/span>\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/td>\n<\/tr>\n<tr style=\"height: 18px;\">\n<td class=\"table-td\">SET()<\/td>\n<td>SET\u306e\u4e2d\u306b\u95a2\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3068\u3001<span class=\"pink_span\">\u524a\u9664\u306e\u969b\u306b\u8a2d\u5b9a\u3057\u305f\u95a2\u6570\u304c\u547c\u3073\u51fa\u3055\u308c\u308b<\/span><\/td>\n<\/tr>\n<tr style=\"height: 18px;\">\n<td class=\"table-td\">RESTRICT<br \/>(Django3.1\u4ee5\u964d)<\/td>\n<td>\u53c2\u7167\u5148\u3092\u524a\u9664\u3059\u308b\u969b\u306bRestictedError\u3092\u767a\u751f\u3055\u305b\u3066\u3001\u4fdd\u8b77\u3059\u308b\u3002\u305f\u3060\u3057\u3001<span class=\"pink_span\">\u53c2\u7167\u5148\u306e\u53c2\u7167\u5148\u304c\u524a\u9664\u3055\u308c\u308b\u969b\u306b\u3001CASCADE\u3067\u305d\u306e\u53c2\u7167\u5148\u306b\u7d10\u3065\u3051\u3089\u308c\u3044\u305f\u5834\u5408\u306b\u306f\u3001\u4fdd\u8b77\u3055\u308c\u305a\u524a\u9664\u3055\u308c\u308b\u3002<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 class=\"title-border\">SET(), PROTECT, RESTRICT\u306e\u5177\u4f53\u7684\u306a\u5229\u7528\u65b9\u6cd5<\/h2>\n<p>SET()\u3068PROTECT\u3068RESTRICT\u306e\u4ed5\u7d44\u307f\u306f\u308f\u304b\u308a\u306b\u304f\u3044\u306e\u3067\u3001\u4ee5\u4e0b\u306b\u5177\u4f53\u4f8b\u3092\u4e0a\u3052\u3066\u3054\u8aac\u660e\u3059\u308b\u3002<\/p>\n<div class=\"programming-gray\">\n<h4>Example<\/h4>\n<ul>\n<li>SET()\u306e\u4e8b\u4f8b<\/li>\n<\/ul>\n<div class=\"programming-inside\">\nfrom django.conf import settings<br \/>\nfrom django.contrib.auth import get_user_model<br \/>\nfrom django.db import models<\/p>\n<p>def get_sentinel_user():<strong># \u524a\u9664\u306b\u5b9f\u884c\u3055\u308c\u308b\u51e6\u7406\u3067return\u306e\u5024\u304c\u524a\u9664\u3055\u308c\u305f\u30ec\u30b3\u30fc\u30c9\u306b\u8a2d\u5b9a\u3055\u308c\u308b<\/strong><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;return get_user_model().objects.get_or_create(username='deleted')[0]<\/p>\n<p>class MyModel(models.Model):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;user = models.ForeignKey(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;settings.AUTH_USER_MODEL,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"codehighlight\">on_delete=models.SET<\/span>(get_sentinel_user), <strong># models.SET\u3067\u524a\u9664\u6642\u306b\u5b9f\u884c\u3055\u308c\u308b\u95a2\u6570\u3092\u8a2d\u5b9a\u3059\u308b<\/strong><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;)\n<\/div>\n<p>&nbsp;<br \/>\nRESTRICT\u3068PROTECT\u306f\u52d5\u4f5c\u304c\u4f3c\u3066\u3044\u308b\u305f\u3081\u3001\u4ee5\u4e0b\u306b\u56f3\u3092\u7528\u3044\u3066\u8aac\u660e\u3059\u308b\u3002<\/p>\n<ul>\n<li>RESTRICT\u3068PROTECT\u306e\u9055\u3044<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/1-6-1024x569.png\" alt=\"\" width=\"1024\" height=\"569\" class=\"alignnone size-large wp-image-2492\" srcset=\"https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/1-6-1024x569.png 1024w, https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/1-6-300x167.png 300w, https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/1-6-768x427.png 768w, https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/1-6-630x350.png 630w, https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/1-6.png 1181w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<ul>\n<li>RESTRICT\u306e\u4f8b<\/li>\n<\/ul>\n<div class=\"programming-inside\">\nclass Students(models.Model):<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;name = models.CharField(max_length=20)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;school = models.ForeignKey( <strong># RESTRICT\u3092\u6307\u5b9a\u3059\u308b\u3002Schools\u524a\u9664\u6642\u306f\u30a8\u30e9\u30fc(RestictedError)<\/strong><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Schools', <span class=\"codehighlight\">on_delete=models.RESTRICT<\/span><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;prefecture = models.ForeignKey( <strong># CASCADE\u3092\u6307\u5b9a\u3059\u308b\u3002Schools\u524a\u9664\u6642\u306fSchools\u3068\u3068\u3082\u306b\u8a72\u5f53\u30ec\u30b3\u30fc\u30c9\u524a\u9664\u3055\u308c\u308b<\/strong><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Prefectures', <span class=\"codehighlight\">on_delete=models.CASCADE<\/span><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;)<\/p>\n<p>class Schools(models.Model):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;name = models.CharField(max_length=20)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;prefecture = models.ForeignKey( # CASCADE\u3092\u6307\u5b9a\u3059\u308b\u3002Schools\u524a\u9664\u6642\u306f\u8a72\u5f53\u30ec\u30b3\u30fc\u30c9\u524a\u9664\u3055\u308c\u308b<\/strong><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Prefectures', <span class=\"codehighlight\">on_delete=models.CASCADE<\/span><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;)<\/p>\n<p>class Prefectures(models.Model):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;name = models.CharField(max_length=20)<\/p>\n<\/div>\n<\/div>\n<div class=\"django-adsense\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Django2\u7cfb\u4ee5\u964d\u306emodels.py\u304b\u3089\u5fc5\u9808\u306b\u306a\u3063\u305fon_delete\u306b\u3064\u3044\u3066 Django\u3067\u306f\u30012.0\u4ee5\u964d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3001\u30e2\u30c7\u30eb\u3092\u4f5c\u6210\u3059\u308b\u969b\u306b\u3001on_delete\u3068\u3044\u3046\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u5fc5\u9808\u306b\u306a\u3063\u305f\u3002 on [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":362,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_uag_custom_page_level_css":"","_uf_show_specific_survey":0,"_uf_disable_surveys":false,"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[121,219],"tags":[122,130,131,14],"class_list":{"0":"post-700","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-django","8":"category-it-programming","9":"tag-django","10":"tag-model","11":"tag-on_delete","12":"tag-python","13":"entry"},"uagb_featured_image_src":{"full":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480.jpg",640,480,false],"thumbnail":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480-150x150.jpg",150,150,true],"medium":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480-300x225.jpg",300,225,true],"medium_large":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480.jpg",640,480,false],"large":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480.jpg",640,480,false],"1536x1536":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480.jpg",640,480,false],"2048x2048":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480.jpg",640,480,false],"home-middle":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480.jpg",467,350,false],"home-top":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480.jpg",560,420,false],"sidebar-thumbnail":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/organization-2478211__480.jpg",100,75,false]},"uagb_author_info":{"display_name":"9nmatsumoto","author_link":"https:\/\/www.nblog09.com\/w\/author\/9nmatsumoto\/"},"uagb_comment_info":0,"uagb_excerpt":"Django2\u7cfb\u4ee5\u964d\u306emodels.py\u304b\u3089\u5fc5\u9808\u306b\u306a\u3063\u305fon_delete\u306b\u3064\u3044\u3066 Django\u3067\u306f\u30012.0\u4ee5&hellip;","_links":{"self":[{"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/posts\/700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/comments?post=700"}],"version-history":[{"count":23,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/posts\/700\/revisions"}],"predecessor-version":[{"id":3783,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/posts\/700\/revisions\/3783"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/media\/362"}],"wp:attachment":[{"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/media?parent=700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/categories?post=700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/tags?post=700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}