{"id":1127,"date":"2019-05-17T23:52:05","date_gmt":"2019-05-17T14:52:05","guid":{"rendered":"https:\/\/www.nblog09.com\/w\/?p=1127"},"modified":"2021-11-11T17:45:06","modified_gmt":"2021-11-11T08:45:06","slug":"django-save","status":"publish","type":"post","link":"https:\/\/www.nblog09.com\/w\/2019\/05\/17\/django-save\/","title":{"rendered":"Django\u3067Model\u306esave\u524d\u5f8c\u3067\u51e6\u7406\u3092\u884c\u3046Signal\u306epre_save, post_save\u306e\u4f7f\u3044\u65b9"},"content":{"rendered":"<p>Django\u306eSignal\u3068\u306f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5185\u3067\u30a2\u30af\u30b7\u30e7\u30f3\u304c\u767a\u751f\u3057\u305f\u969b\u306b\u51e6\u7406\u304c\u767a\u751f\u3059\u308b\u4ed5\u7d44\u307f\u3092\u8a00\u3044\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306aSignal\u304c\u3042\u308b\u3002<\/p>\n<table class=\"customized_table\">\n<tbody>\n<tr>\n<td>pre_save<br \/>\npost_save<\/><\/p>\n<td>\u30e2\u30c7\u30eb\u306esave()\u30e1\u30bd\u30c3\u30c9\u304c\u5b9f\u884c\u3055\u308c\u308b\u524d\u5f8c\u306b\u5b9f\u884c\u3055\u308c\u308b<br \/>\n(\u672c\u8a18\u4e8b\u3067\u8a73\u7d30\u3092\u8aac\u660e)<\/td>\n<\/tr>\n<tr>\n<td>pre_save<br \/>\npost_save<\/td>\n<td>\u30e2\u30c7\u30eb\u306edelete()\u30e1\u30bd\u30c3\u30c9\u3001QuerySet\u306edelete()\u30e1\u30bd\u30c3\u30c9\u304c\u5b9f\u884c\u3055\u308c\u308b\u524d\u5f8c\u3067\u5b9f\u884c\u3055\u308c\u308b<\/td>\n<\/tr>\n<tr>\n<td>m2m_changed<\/td>\n<td>\u30e2\u30c7\u30eb\u306eManyToMany\u304c\u5909\u66f4\u3055\u308c\u305f\u3068\u304d\u306b\u547c\u3073\u51fa\u3055\u308c\u308b<\/td>\n<\/tr>\n<tr>\n<td>request_started<br \/>\nrequest_finished<\/td>\n<td>Django\u304cRequest\u3092\u51e6\u7406\u3059\u308b\u524d\u5f8c\u3067\u547c\u3073\u51fa\u3055\u308c\u308b<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 class=\"title-border\"><strong><br \/>\npre_save, post_save\u306e\u8a73\u7d30\u30fb\u5b9a\u7fa9\u306e\u65b9\u6cd5<\/strong><\/h2>\n<p>per_save\u306f\u3001<span class=\"pink_span\">model\u306esave()\u30e1\u30bd\u30c3\u30c9\u51e6\u7406\u306e\u524d\u306b\u547c\u3073\u51fa\u3055\u308c\u308b<\/span><\/p>\n<p>\u4ee5\u4e0b\u306e\u5f15\u6570\u3092\u6301\u3064<\/p>\n<ul>\n<li>sender: \u30e2\u30c7\u30eb\u30af\u30e9\u30b9<\/li>\n<li>instance: \u4fdd\u5b58\u3055\u308c\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9<\/li>\n<li>pre_save\u7528\u306e\u95a2\u6570\u3092\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9a\u7fa9<\/li>\n<\/ul>\n<p>\u305d\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b<span class=\"pink_span\">django.db.models.signals.presave.connect()\u3067\u30e2\u30c7\u30eb\u306bpre_save\u306b\u767b\u9332\u8a2d\u5b9a\u3059\u308b<\/span><\/p>\n<div class=\"programming-inside\">\ndef blog_post_model_pre_save_receiver(sender, instance, *args, **kwargs):<br \/>\n<strong># sender, instance, *args, **kwargs\u3092\u5f15\u6570\u3068\u3057\u3066\u6301\u3064<\/strong><\/p>\n<p>from django.db.models.signals import pre_save<br \/>\npre_save.connect(blog_post_model_pre_save_receiver, sender=PostModel)\n<\/p><\/div>\n<p>\u5b9f\u969b\u306b\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a18\u8f09\u3059\u308b\u3002<\/p>\n<div class=\"programming-gray\">\n<ul>\n<li>models.py\u306e\u5b9a\u7fa9<\/li>\n<\/ul>\n<div class=\"programming-inside\">\nclass PostModel(models.Model):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;id = models.BigAutoField(primary_key=True)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;active = models.BooleanField(blank=True)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;title = models.CharField(max_length=240)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;slug = models.SlugField(null=True, blank=True)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;content = models.TextField(null=True, blank=True)<\/p>\n<p><span class=\"codehighlight\">def blog_post_model_pre_save_receiver(sender, instance, *args, **kwargs):<\/span><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;if not instance.slug and instance.title:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance.slug = slugify(instance.title)<\/p>\n<p><span class=\"codehighlight\">pre_save.connect(blog_post_model_pre_save_receiver, sender=PostModel)<\/span><br \/>\n<strong># pre_save\u3092PostModel\u30e2\u30c7\u30eb\u306b\u8a2d\u5b9a\u3057\u3059\u308b\u3002<br \/>\n# \u4fdd\u5b58\u524d\u306b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306etitle\u304c\u51fa\u529b\u3055\u308c\u3001slug\u304c\u8a2d\u5b9a\u3055\u308c\u308b<\/strong>\n<\/div>\n<\/div>\n<p>\u307e\u305f\u3001pre_save\u306e\u8a2d\u5b9a\u3092\u5916\u3059\u306b\u306f\u3001<span class=\"pink_span\">disconnect\u30e1\u30bd\u30c3\u30c9\u3092\u5229\u7528\u3059\u308b\u3002<\/span><br \/>\n<span class=\"codehighlight\"><br \/>\npre_save.disconnect(blog_post_model_pre_save_receiver, sender=PostModel)<br \/>\n<\/span><br \/>\n\u540c\u69d8\u306bmodel\u306esave()\u5f8c\u306b\u5b9f\u884c\u3059\u308b\u3088\u3046\u306b\u30b7\u30b0\u30ca\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\u306e\u306f\u3001post_save\u3092\u5229\u7528\u3059\u308b\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u5f15\u6570\u3092\u6301\u3064<\/p>\n<ul>\n<li>sender: \u30e2\u30c7\u30eb\u30af\u30e9\u30b9<\/li>\n<li>instance: \u4fdd\u5b58\u3055\u308c\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9<\/li>\n<li>created: \u30ec\u30b3\u30fc\u30c9\u304c\u65b0\u305f\u306b\u4f5c\u6210\u3055\u308c\u305f\u3068\u304d\u306bTrue\u3092\u8fd4\u3059\u30d6\u30fc\u30eb\u5024<\/li>\n<li>pre_save\u7528\u306e\u95a2\u6570\u3092\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9a\u7fa9<\/li>\n<\/ul>\n<p>\u305d\u3057\u3066\u3001django.db.models.signals.post_save.connect()\u3067\u30e2\u30c7\u30eb\u306bpost_save\u306b\u767b\u9332\u3059\u308b<\/p>\n<div class=\"programming-inside\">\ndef blog_post_model_post_save_receiver(sender, instance, created, *args, **kwargs):<br \/>\n<strong># sender, instance, created, *args, **kwargs\u3092\u5f15\u6570\u3068\u3057\u3066\u6301\u3064<\/strong><\/p>\n<p>from django.db.models.signals import post_save<br \/>\npost_save.connect(blog_post_model_post_save_receiver, sender=PostModel)\n<\/p><\/div>\n<p>\u5b9f\u969b\u306b\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a18\u8f09\u3059\u308b<\/p>\n<div class=\"programming-gray\">\n<ul>\n<li>post_save\u306e\u5b9a\u7fa9<\/li>\n<\/ul>\n<div class=\"programming-inside\">\ndef blog_post_model_post_save_receiver(sender, instance, created, *args, **kwargs):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;if created:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not instance.slug and instance.title:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance.slug = slugify(instance.title)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance.save()<\/p>\n<p>post_save.connect(blog_post_model_post_save_receiver, sender=PostModel)<br \/>\n# receiver, sender\u3092\u8a2d\u5b9a\u3001model\u306esave\u5f8c\u306b\u3001blog_post_model_post_save_receirver\u304c\u547c\u3073\u51fa\u3055\u308c\u308b\n<\/p><\/div>\n<p>\u540c\u69d8\u306bpost_save\u306e\u8a2d\u5b9a\u3092\u5916\u3059\u306b\u306fdisconnect\u3092\u5229\u7528\u3059\u308b<\/p>\n<div class=\"programming-inside\">\npost_save.disconnect(blog_post_model_post_save_receiver, sender=PostModel)\n<\/div>\n<\/div>\n<h2 class=\"title-border\"><strong><br \/>\npre_save, post_save\u306e\u5b9a\u7fa9\u306e\u65b9\u6cd5\uff12<\/strong><\/h2>\n<p>pre_save, post_save\u3092\u767b\u9332\u3059\u308b\u65b9\u6cd5\u306f\u3001\u30c7\u30b3\u30ec\u30fc\u30bf\u3092\u4f7f\u3046\u65b9\u6cd5\u3082\u3042\u308a\u3001\u7c21\u6f54\u306b\u8a18\u8f09\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b<\/p>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u95a2\u6570\u306e\u4e0a\u306b<span class=\"pink_span\">@receiver(pre_save(or post_save),model\u30af\u30e9\u30b9)\u306e\u3088\u3046\u306b\u8a18\u8f09\u3059\u308b\u3002<\/span><\/p>\n<div class=\"programming-gray\">\n<ul>\n<li>pre_save, post_save\u306e\u8a2d\u5b9a\u65b9\u6cd52<\/li>\n<\/ul>\n<div class=\"programming-inside\">\nfrom django.dispatch import receiver<br \/>\nfrom django.db.models.signals import post_save, pre_save<\/p>\n<p><strong># PostModel\u306esave\u524d\u306b\u5b9f\u884c\u3055\u308c\u308b<\/strong><br \/>\n<span class=\"codehighlight\">@receiver(pre_save, sender=PostModel)<\/span><br \/>\ndef blog_post_model_pre_save_receiver(sender, instance, *args, **kwargs):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;if not instance.slug and instance.title:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance.slug = slugify(instance.title)<\/p>\n<p><strong># PostModel\u306esave\u5f8c\u306b\u5b9f\u884c\u3055\u308c\u308b<\/strong><br \/>\n<span class=\"codehighlight\">@receiver(post_save, sender=PostModel)<\/span><br \/>\ndef blog_post_model_post_save_receiver(sender, instance, created, *args, **kwargs):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;if created:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not instance.slug and instance.title:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance.slug = slugify(instance.title)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance.save()\n<\/div>\n<\/div>\n<div class=\"django-adsense\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Django\u306eSignal\u3068\u306f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5185\u3067\u30a2\u30af\u30b7\u30e7\u30f3\u304c\u767a\u751f\u3057\u305f\u969b\u306b\u51e6\u7406\u304c\u767a\u751f\u3059\u308b\u4ed5\u7d44\u307f\u3092\u8a00\u3044\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306aSignal\u304c\u3042\u308b\u3002 pre_save post_save \u30e2\u30c7\u30eb\u306esave()\u30e1\u30bd\u30c3\u30c9\u304c\u5b9f\u884c\u3055\u308c\u308b\u524d\u5f8c\u306b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":373,"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],"tags":[],"class_list":{"0":"post-1127","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-django","8":"entry"},"uagb_featured_image_src":{"full":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480.jpg",720,480,false],"thumbnail":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480-150x150.jpg",150,150,true],"medium":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480.jpg",720,480,false],"large":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480.jpg",720,480,false],"1536x1536":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480.jpg",720,480,false],"2048x2048":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480.jpg",720,480,false],"home-middle":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480.jpg",525,350,false],"home-top":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480.jpg",630,420,false],"sidebar-thumbnail":["https:\/\/www.nblog09.com\/w\/wp-content\/uploads\/2019\/01\/mill-1620440__480.jpg",100,67,false]},"uagb_author_info":{"display_name":"9nmatsumoto","author_link":"https:\/\/www.nblog09.com\/w\/author\/9nmatsumoto\/"},"uagb_comment_info":2,"uagb_excerpt":"Django\u306eSignal\u3068\u306f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5185\u3067\u30a2\u30af\u30b7\u30e7\u30f3\u304c\u767a\u751f\u3057\u305f\u969b\u306b\u51e6\u7406\u304c\u767a\u751f\u3059\u308b\u4ed5\u7d44\u307f\u3092\u8a00\u3044\u3001\u4ee5\u4e0b\u306e\u3088&hellip;","_links":{"self":[{"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/posts\/1127","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=1127"}],"version-history":[{"count":15,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/posts\/1127\/revisions"}],"predecessor-version":[{"id":3806,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/posts\/1127\/revisions\/3806"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/media\/373"}],"wp:attachment":[{"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/media?parent=1127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/categories?post=1127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nblog09.com\/w\/wp-json\/wp\/v2\/tags?post=1127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}