{"id":14591,"date":"2024-08-29T19:26:49","date_gmt":"2024-08-29T10:26:49","guid":{"rendered":"https:\/\/www.ecomottblog.com\/?p=14591"},"modified":"2024-08-29T19:26:49","modified_gmt":"2024-08-29T10:26:49","slug":"drf%e3%81%ae%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%a9%e3%82%a4%e3%82%b6%e3%81%a8to_internal_value","status":"publish","type":"post","link":"https:\/\/www.ecomottblog.com\/?p=14591","title":{"rendered":"DRF\u306e\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u3068to_internal_value()"},"content":{"rendered":"\u3053\u3093\u306b\u3061\u306f\uff01\u958b\u767a\u90e8\u306e\u7c73\u68ee\u3067\u3059\uff01\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n\n\u73fe\u5728\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067Django Restframework\uff08\u4ee5\u4e0bDRF\uff09\u3092\u4f7f\u7528\u3057\u3066Web API\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002\u3068\u3066\u3082\u4fbf\u5229\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306a\u306e\u3067\u52b9\u7387\u7684\u306b\u958b\u767a\u3092\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u3067\u3059\u304c\u3001DRF\u56fa\u6709\u306e\u6982\u5ff5\u3067\u3042\u308b\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u306b\u30cf\u30de\u3063\u3066\u3057\u307e\u3063\u305f\u306e\u3067\u3001\u305d\u306e\u3042\u305f\u308a\u306e\u60c5\u5831\u5171\u6709\u3092\u3055\u305b\u3066\u304f\u3060\u3055\u3044\uff01\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:more -->\n\n<!--more-->\n\n<!-- \/wp:more -->\n\n<!-- wp:heading -->\n\n<h2 class=\"wp-block-heading\">DRF\u30fb\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u3068\u306f<\/h2>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\nDjango Rest Framework\uff08DRF\uff09\u306f\u3001Django\u3092\u30d9\u30fc\u30b9\u306b\u3057\u305fWeb API\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u305d\u306e\u4e2d\u3067\u3082\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u306f\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306a\u5f79\u5272\u3092\u62c5\u3046\u91cd\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:list {\"ordered\":true} -->\n\n<ol><!-- wp:list-item -->\n<li><strong>\u30c7\u30fc\u30bf\u5909\u63db<\/strong>\uff1a\u30e2\u30c7\u30eb\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092JSON\u306a\u3069\u306b\u5909\u63db\u3057\u3001\u307e\u305f\u305d\u306e\u9006\u3082\u884c\u3046<\/li>\n<!-- \/wp:list-item -->\n\n<!-- wp:list-item -->\n<li><strong>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/strong>\uff1a\u30c7\u30fc\u30bf\u304c\u6b63\u3057\u3044\u5f62\u5f0f\u3067\u3042\u308b\u304b\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3001\u4e0d\u6b63\u306a\u30c7\u30fc\u30bf\u304c\u4fdd\u5b58\u3055\u308c\u308b\u306e\u3092\u9632\u3050<\/li>\n<!-- \/wp:list-item --><\/ol>\n\n<!-- \/wp:list -->\n\n<!-- wp:paragraph -->\n\n\u3053\u308c\u3089\u3092\u52b9\u7387\u7684\u306b\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306e\u4fbf\u5229\u306a\u30af\u30e9\u30b9\u3084\u30e1\u30bd\u30c3\u30c9\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u3068\u3066\u3082\u4fbf\u5229\u3067\u3059\u3002\u3057\u304b\u3057\u4e00\u65b9\u3067\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u304c\u5b9f\u884c\u3055\u308c\u308b\u9806\u756a\u306a\u3069\u3001\u5b9f\u88c5\u3059\u308b\u4e0a\u3067\u6c17\u3092\u4ed8\u3051\u3066\u7f6e\u304f\u3079\u304d\u3053\u3068\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u3001\u30cf\u30de\u3063\u3066\u3057\u307e\u3063\u305f\u7d4c\u9a13\u304c\u3042\u308a\u307e\u3059\u2026\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n\n<h2 class=\"wp-block-heading\">\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u3067\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/h2>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\nDRF\u306e\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u3067\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3059\u308b\u5834\u5408\u3001\u4e0b\u8a18\u306e\u9078\u629e\u80a2\u304c\u3042\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n\n<ul><!-- wp:list-item -->\n<li>\u2460\u30e2\u30c7\u30eb or \u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u5ba3\u8a00\u6642\u306b\u30d0\u30ea\u30c7\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3059\u308b<\/li>\n<!-- \/wp:list-item -->\n\n<!-- wp:list-item -->\n<li>\u2461\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u30af\u30e9\u30b9\u306e<code>validate_&lt;field&gt;<\/code>\u3067\u30d5\u30a3\u30fc\u30eb\u30c9\u5358\u4f4d\u3067\u691c\u8a3c\u3059\u308b<\/li>\n<!-- \/wp:list-item -->\n\n<!-- wp:list-item -->\n<li>\u2462\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u30af\u30e9\u30b9\u306e<code>validate()<\/code>\u3067\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u5358\u4f4d\u3067\u691c\u8a3c\u3059\u308b<\/li>\n<!-- \/wp:list-item --><\/ul>\n\n<!-- \/wp:list -->\n\n<!-- wp:heading -->\n\n<h2 class=\"wp-block-heading\">\u5b9f\u969b\u306b\u5b9f\u88c5\u3057\u3066\u307f\u308b<\/h2>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u4e0a\u8a18\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u304c\u3069\u306e\u3088\u3046\u306b\u8d70\u3063\u3066\u3044\u308b\u306e\u304b\u3092\u898b\u308b\u305f\u3081\u306b\u3001\u7c21\u5358\u306a\u4f8b\u3092\u5b9f\u88c5\u3057\u3066\u307f\u307e\u3059\u3002\u4eca\u56de\u306f\u300c\u4e0a\u9650\u5024\u300d\u3068\u300c\u4e0b\u9650\u5024\u300d\u304c\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089POST\u3055\u308c\u3001\u305d\u308c\u3092DB\u306b\u4fdd\u5b58\u3059\u308b\u3068\u3044\u3046\u30b1\u30fc\u30b9\u60f3\u5b9a\u3057\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n\n<h3 class=\"wp-block-heading\">\u30e2\u30c7\u30eb<\/h3>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u307e\u305a\u306f<code>models.py<\/code> \u306b\u30e2\u30c7\u30eb\u3092\u5b9a\u7fa9\u3002\u30e2\u30c7\u30eb\u3068\u306fDB\u3068\u306e\u3084\u308a\u53d6\u308a\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u30af\u30e9\u30b9\u3067\u3059\u3002\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u304cDB\u306e\u30c6\u30fc\u30d6\u30eb\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u30c6\u30fc\u30d6\u30eb\u306e\u30ab\u30e9\u30e0\u3001\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u30ec\u30b3\u30fc\u30c9\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u300c\u4e0a\u9650\u5024\u300d\u3068\u300c\u4e0b\u9650\u5024\u300d\u306e2\u3064\u304cPOST\u3055\u308c\u308b\u306e\u3067\u3001\u305d\u308c\u7528\u306e\u30e2\u30c7\u30eb\u3092\u4f5c\u3063\u3066\u3042\u3052\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># models.py\nclass TestModel(models.Model):\n    '''\u52d5\u4f5c\u78ba\u8a8d\u7528\u30c6\u30b9\u30c8\u30e2\u30c7\u30eb'''\n    bottom_limit = models.IntegerField('\u4e0b\u9650\u5024')\n    upper_limit = models.IntegerField('\u4e0a\u9650\u5024')<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:heading {\"level\":3} -->\n\n<h3 class=\"wp-block-heading\">\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6<\/h3>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u6b21\u306b\u3001\u672c\u984c\u3067\u3042\u308b\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30af\u30e9\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002DRF\u306eModelSerializer\u3092\u7d99\u627f\u3059\u308b\u3053\u3068\u3067\u3001\u5148\u307b\u3069\u5b9a\u7fa9\u3057\u305f\u30e2\u30c7\u30eb\u5c02\u7528\u306e\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30af\u30e9\u30b9\u3092\u7c21\u5358\u306b\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># serializers.py\nclass TestSerializer(serializers.ModelSerializer):\n    '''\u52d5\u4f5c\u78ba\u8a8d\u7528\u30c6\u30b9\u30c8\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6'''\n    class Meta:\n        model = TestModel # -&gt; \u5148\u307b\u3069\u5b9a\u7fa9\u3057\u305f\u30e2\u30c7\u30eb\u3092\u6307\u5b9a\n        fields = ['bottom_limit', 'upper_limit'] # -&gt; \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u5bfe\u8c61\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6307\u5b9a<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:heading {\"level\":3} -->\n\n<h3 class=\"wp-block-heading\">\u30d3\u30e5\u30fc<\/h3>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u53d6\u3063\u3066\u3001\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u3092\u901a\u3057\u3066\u30e2\u30c7\u30eb\u7d4c\u7531\u3067DB\u306b\u4fdd\u5b58\u3059\u308b\u3068\u3044\u3046\u30ed\u30b8\u30c3\u30af\u3092\u4f5c\u308a\u307e\u3059\u3002<code>ModelViewSet<\/code>\u3092\u4f7f\u7528\u3059\u308b\u3068\u30e2\u30c7\u30eb\u306b\u5bfe\u3059\u308bCRUD\u64cd\u4f5c\u3092\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># views.py\nclass TestViewSet(viewsets.ModelViewSet):\n    '''\u52d5\u4f5c\u78ba\u8a8d\u7528\u30c6\u30b9\u30c8\u30d3\u30e5\u30fc'''\n    serializer_class = TestSerializer # -&gt; \u5148\u307b\u3069\u306e\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u6307\u5b9a<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u5148\u307b\u3069\u5b9f\u88c5\u3057\u305f\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u3092<code>serializer_class<\/code>\u3067\u6307\u5b9a\u3059\u308b\u3068\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089POST\u3055\u308c\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u305d\u306e\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u3092\u901a\u3063\u3066\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u5074\u3067 <code>model = TestModel<\/code> \u3068\u30e2\u30c7\u30eb\u3092\u6307\u5b9a\u3057\u3066\u3042\u3052\u305f\u306e\u3067\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u5f8c\u306e\u30dd\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u30e2\u30c7\u30eb\u306b\u884c\u304d\u3001DB\u306b\u30ec\u30b3\u30fc\u30c9\u3069\u3057\u3066\u4fdd\u5b58\u3055\u308c\u308b\u3068\u3044\u3046\u6d41\u308c\u3067\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n\n<h3 class=\"wp-block-heading\">URL<\/h3>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u6700\u5f8c\u306b\u3001URL\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u3057\u3066\u2191\u306e\u30d3\u30e5\u30fc\u3092API\u3067\u53e9\u3051\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># urls.py\nrouter = routers.DefaultRouter()\nrouter.register('test', TestViewSet) # -&gt; \u30d1\u30b9\u3068\u30d3\u30e5\u30fc\u3092\u6307\u5b9a\n\nurlpatterns = [\n    path('', include(router.urls)), # -&gt; URL\u30d1\u30bf\u30fc\u30f3\u306b\u542b\u3081\u308b\n]<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:heading -->\n\n<h2 class=\"wp-block-heading\">\u5b9f\u969b\u306bPOST\u3057\u3066\u307f\u308b<\/h2>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u5b9f\u88c5\u306f\u6e08\u3093\u3060\u306e\u3067\u3001<code>\/test\/<\/code>\u306b\u5bfe\u3057\u3066\u6700\u5c0f\u5024\u3068\u6700\u5927\u5024\u3092POST\u3057\u3066\u307f\u307e\u3059\u3002VS Code\u306b\u306f<a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=humao.rest-client\" data-type=\"link\" data-id=\"https:\/\/marketplace.visualstudio.com\/items?itemName=humao.rest-client\">REST CLIENT<\/a>\u3068\u3044\u3046\u4fbf\u5229\u306aAPI\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u62e1\u5f35\u6a5f\u80fd\u304c\u3042\u308b\u306e\u3067\u3001\u305d\u308c\u3092\u4f7f\u7528\u3057\u3066\u52d5\u4f5c\u78ba\u8a8d\u3057\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>### \u4e0a\u9650\u5024\u30fb\u4e0b\u9650\u5024\u767b\u9332\u30c6\u30b9\u30c8\nPOST http:\/\/localhost:8000\/test\/\nContent-Type: application\/json\n\n{\n  \"bottom_limit\": 1,\n  \"upper_limit\": 10\n}<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u5148\u307b\u3069\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3057\u305fURL\u306b\u5bfe\u3057\u3066\u3001&#8221;bottom_limit&#8221;\u3068&#8221;upper_limit&#8221;\u3092POST\u3057\u307e\u3059\u3002\u3059\u308b\u3068\u4e0b\u8a18\u306e\u901a\u308a201\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u8fd4\u5374\u3055\u308c\u307e\u3057\u305f\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"id\":15001,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"330\" height=\"351\" class=\"wp-image-15001\" src=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829095658.png\" alt=\"\" srcset=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829095658.png 330w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829095658-282x300.png 282w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829095658-201x214.png 201w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829095658-244x260.png 244w\" sizes=\"(max-width: 330px) 100vw, 330px\" \/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n\n\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u81ea\u4f53\u306f\u901a\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002\u5024\u304cDB\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u304b\u3001API\u7d4c\u7531\u3067\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3059\u3002<code>ModelViewSet<\/code>\u3092\u4f7f\u3048\u3070\u81ea\u52d5\u7684\u306bHTTP\u30e1\u30bd\u30c3\u30c9\u306b\u5fdc\u3058\u305fCRUD\u64cd\u4f5c\u3092\u5185\u90e8\u7684\u306b\u884c\u3063\u3066\u304f\u308c\u308b\u306e\u3067\u3001\u5148\u307b\u3069\u3068\u540c\u3058URL\u306b\u5bfe\u3057\u3066GET\u30e1\u30bd\u30c3\u30c9\u3067\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3059\u308c\u3070\u3001\u4e00\u89a7\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u3066\u304f\u308c\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>### \u4e0a\u9650\u5024\u30fb\u4e0b\u9650\u5024\u4e00\u89a7\u30c6\u30b9\u30c8\nGET http:\/\/localhost:8000\/test\/\nContent-Type: application\/json<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u4e0a\u8a18API\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9200\u3067\u3001\u5148\u307b\u3069\u767b\u9332\u3057\u305f\u4e0a\u9650\u5024\u30fb\u4e0b\u9650\u5024\u304c\u30c7\u30fc\u30bf\u306b\u542b\u307e\u308c\u305f\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u8fd4\u3063\u3066\u304d\u307e\u3059\u3002\u554f\u984c\u306a\u304fDB\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"id\":15008,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"501\" height=\"589\" class=\"wp-image-15008\" src=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829101107.png\" alt=\"\" srcset=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829101107.png 501w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829101107-255x300.png 255w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829101107-182x214.png 182w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829101107-221x260.png 221w\" sizes=\"(max-width: 501px) 100vw, 501px\" \/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:heading -->\n\n<h2 class=\"wp-block-heading\">\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3057\u3066\u307f\u308b<\/h2>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u3067\u306f\u3001\u672c\u984c\u3067\u3042\u308b\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3057\u3066\u307f\u307e\u3059\u3002DRF\u306e\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u3067\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3059\u308b\u5834\u5408\u3001\u4e0b\u8a18\u306e\u9078\u629e\u80a2\u304c\u3042\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n\n<ul><!-- wp:list-item -->\n<li>\u2460\u30e2\u30c7\u30eb\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u5b9a\u7fa9\u6642\u306b\u30d0\u30ea\u30c7\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3059\u308b<\/li>\n<!-- \/wp:list-item -->\n\n<!-- wp:list-item -->\n<li>\u2461\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u30af\u30e9\u30b9\u306e<code>validate_&lt;field&gt;<\/code>\u3067\u30d5\u30a3\u30fc\u30eb\u30c9\u5358\u4f4d\u3067\u691c\u8a3c\u3059\u308b<\/li>\n<!-- \/wp:list-item -->\n\n<!-- wp:list-item -->\n<li>\u2462\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u30af\u30e9\u30b9\u306e<code>validate()<\/code>\u3067\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u5358\u4f4d\u3067\u691c\u8a3c\u3059\u308b<\/li>\n<!-- \/wp:list-item --><\/ul>\n\n<!-- \/wp:list -->\n\n<!-- wp:paragraph -->\n\n\u6ce8\u610f\u3059\u3079\u304d\u306a\u306e\u306f\u3001\u3053\u308c\u30893\u3064\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306f\u4e0a\u8a18\u306e\u901a\u308a\u306b\u5b9f\u884c\u3055\u308c\u308b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n\n<h3 class=\"wp-block-heading\">\u2460\u30e2\u30c7\u30eb\u306b\u30d0\u30ea\u30c7\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3059\u308b<\/h3>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u307e\u305a\u306f\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u5b9a\u7fa9\u3059\u308b\u30d0\u30ea\u30c7\u30fc\u30bf\u3092\u4f5c\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># validators.py\nclass TestValidator:\n    def __call__(self, value):\n        print('\u2460\u3000--- TestValidator: \u30d0\u30ea\u30c7\u30fc\u30bf\u30fc\u3067\u306e\u691c\u8a3c')<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u6319\u52d5\u3092\u78ba\u8a8d\u3059\u308b\u3060\u3051\u306a\u306e\u3067\u3001\u30c7\u30d0\u30c3\u30b0\u30d7\u30ea\u30f3\u30c8\u306e\u307f\u306e\u5b9f\u88c5\u3067\u3059\u3002\u3053\u308c\u3092\u30e2\u30c7\u30eb\u3067\u5b9a\u7fa9\u3057\u3066\u3044\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># models.py\nclass TestModel(models.Model):\n    '''\u52d5\u4f5c\u78ba\u8a8d\u7528\u30c6\u30b9\u30c8\u30e2\u30c7\u30eb'''\n    bottom_limit = models.IntegerField('\u4e0b\u9650\u5024', validators=[TestValidator()]) # -&gt; \u30d0\u30ea\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0\n    upper_limit = models.IntegerField('\u4e0a\u9650\u5024', validators=[TestValidator()]) # -&gt; \u30d0\u30ea\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:heading {\"level\":3} -->\n\n<h3 class=\"wp-block-heading\">\u2461validate_[field]\u3067\u30d5\u30a3\u30fc\u30eb\u30c9\u5358\u4f4d\u3067\u691c\u8a3c\u3059\u308b<\/h3>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n<code>validate_[field]()<\/code> \u30e1\u30bd\u30c3\u30c9\u306f\u3001\u7279\u5b9a\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u5bfe\u3059\u308b\u30ab\u30b9\u30bf\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u884c\u3046\u305f\u3081\u306e\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002<code>validate_&lt;\u30e2\u30c7\u30eb\u3067\u5b9a\u7fa9\u3057\u305f\u30d5\u30a3\u30fc\u30eb\u30c9\u540d&gt;()<\/code>\u3068\u3044\u3046\u30e1\u30bd\u30c3\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u3068\u3001\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30af\u30e9\u30b9\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u5b9f\u884c\u6642\u306b\u81ea\u52d5\u3067\u547c\u3073\u51fa\u3055\u308c\u307e\u3059\u3002\u4f8b\u3048\u3070<code>validate_bottom_limit()<\/code>\u3068\u3059\u308b\u3068\u3001POST\u3055\u308c\u3066\u304d\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u306e&#8221;bottom_limit&#8221;\u3092\u81ea\u52d5\u3067\u5f15\u6570\u306b\u53d7\u3051\u53d6\u308a\u3001\u5024\u3092\u691c\u8a3c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># serializers.py\nclass TestSerializer(serializers.ModelSerializer):\n    '''\u52d5\u4f5c\u78ba\u8a8d\u7528\u30c6\u30b9\u30c8\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6'''\n    class Meta:\n        model = TestModel\n        fields = ['bottom_limit', 'upper_limit']\n\n    # \u65b0\u898f\u8ffd\u52a0\n\u3000\u3000 def validate_bottom_limit(self, value):\n        print('\u2461\u3000--- validate_bottom_limit(): \u4e0b\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c')\n\u3000\u3000\u3000\u3000# value\u3092\u691c\u8a3c\u3057\u3001\u554f\u984c\u304c\u3042\u308c\u3070\u4f8b\u5916\u51e6\u7406\u3092\u884c\u3046\n        return value\n\n    # \u65b0\u898f\u8ffd\u52a0\n    def validate_upper_limit(self, value):\n        print('\u2461\u3000--- validate_upper_limit(): \u4e0a\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c')\n\u3000\u3000\u3000\u3000# value\u3092\u691c\u8a3c\u3057\u3001\u554f\u984c\u304c\u3042\u308c\u3070\u4f8b\u5916\u51e6\u7406\u3092\u884c\u3046\n        return value<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:heading {\"level\":3} -->\n\n<h3 class=\"wp-block-heading\">\u2462\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30fc\u30af\u30e9\u30b9\u306evalidate()\u3067\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u5358\u4f4d\u3067\u691c\u8a3c\u3059\u308b<\/h3>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n<code>validate()<\/code>\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u5168\u4f53\u306b\u5bfe\u3059\u308b\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u884c\u3046\u305f\u3081\u306e\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u8907\u6570\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u307e\u305f\u304c\u308b\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30ed\u30b8\u30c3\u30af\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u5f15\u6570<code>data<\/code>\u306b\u306f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u306e\u30dd\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u304cdict\u5f62\u5f0f\u3067\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u4efb\u610f\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u53d6\u308a\u51fa\u3057\u3066\u691c\u8a3c\u3067\u304d\u307e\u3059\u3002\u4eca\u56de\u306e\u5834\u5408\u3060\u3068\u3001\u4e0a\u9650\u5024\u3068\u4e0b\u9650\u5024\u3092\u53d6\u308a\u51fa\u3057\u3066\u305d\u306e\u5927\u5c0f\u95a2\u4fc2\u3092\u6bd4\u8f03\u3059\u308b\u3001\u306e\u3088\u3046\u306a\u30b1\u30fc\u30b9\u304c\u8003\u3048\u3089\u308c\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># serializers.py\nclass TestSerializer(serializers.ModelSerializer):\n    '''\u52d5\u4f5c\u78ba\u8a8d\u7528\u30c6\u30b9\u30c8\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6'''\n    class Meta:\n        model = TestModel\n        fields = ['bottom_limit', 'upper_limit']    \n\n    def validate_bottom_limit(self, value):\n        print('\u2461\u3000--- validate_bottom_limit(): \u4e0b\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c')\n        return value\n\n    def validate_upper_limit(self, value):\n        print('\u2461\u3000--- validate_upper_limit(): \u4e0a\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9aa\u691c\u8a3c')\n        return value\n\n    # \u65b0\u898f\u8ffd\u52a0\n    def validate(self, data):\n        print('\u2462\u3000--- validate(): \u4e0b\u9650\u5024\u30fb\u4e0a\u9650\u5024\u306e\u8907\u5408\u691c\u8a3c')\n\u3000\u3000\u3000\u3000# \u4f8b: \u4e0a\u9650\u5024\u3068\u4e0b\u9650\u5024\u3092\u53d6\u308a\u51fa\u3057\u3066\u3001\u5927\u5c0f\u95a2\u4fc2\u3092\u6bd4\u8f03\u3059\u308b\n        return data<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:heading -->\n\n<h2 class=\"wp-block-heading\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u9806\u756a\u3092\u898b\u3066\u307f\u308b<\/h2>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n3\u7a2e\u985e\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3057\u307e\u3057\u305f\u3002\u4e0a\u8ff0\u306e\u901a\u308a\u3001\u30d0\u30ea\u30c7\u30fc\u30bf \u21d2 <code>validate_&lt;field&gt;()<\/code> \u21d2 <code>validate()<\/code> \u3068\u3044\u3046\u9806\u756a\u3067\u5b9f\u884c\u3055\u308c\u308b\u306f\u305a\u306a\u306e\u3067\u3001\u5b9f\u969b\u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092POST\u3057\u3066\u30ed\u30b0\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u5148\u307b\u3069\u3068\u540c\u3058\u30c7\u30fc\u30bf\u3092POST\u3057\u3066\u307f\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>### \n# \u4e0a\u9650\u5024\u30fb\u4e0b\u9650\u5024\u30c6\u30b9\u30c8\nPOST http:\/\/localhost:8000\/test\/\nContent-Type: application\/json\n\n{\n  \"bottom_limit\": 1,\n  \"upper_limit\": 10\n}<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u3059\u308b\u3068\u4e0b\u8a18\u306e\u3088\u3046\u306a\u30ed\u30b0\u304c\u51fa\u529b\u3055\u308c\u307e\u3057\u305f\u3002\u60f3\u5b9a\u901a\u308a\u306e\u9806\u756a\u3067\u5b9f\u884c\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>\u2460\u3000 --- TestValidator: \u30d0\u30ea\u30c7\u30fc\u30bf\u3067\u306e\u691c\u8a3c\n\u2461\u3000 --- validate_upper_limit(): \u4e0a\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c\n\u2460\u3000 --- TestValidator: \u30d0\u30ea\u30c7\u30fc\u30bf\u3067\u306e\u691c\u8a3c\n\u2461\u3000 --- validate_bottom_limit(): \u4e0b\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c\n\u2462\u3000 --- validate(): \u4e0b\u9650\u5024\u30fb\u4e0a\u9650\u5024\u306e\u8907\u5408\u691c\u8a3c<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:heading -->\n\n<h2 class=\"wp-block-heading\">to_internal_value()\u3067\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8abf\u6574<\/h2>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n<code>to_internal_value()<\/code>\u306f\u3001\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30af\u30e9\u30b9\u306b\u6e21\u3055\u308c\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u304c\u59cb\u307e\u308b\u524d\u306b\u5909\u63db\u3059\u308b\u305f\u3081\u306e\u95a2\u6570\u3067\u3059\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089POST\u3055\u308c\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u30e2\u30c7\u30eb\u3067\u5b9a\u7fa9\u3057\u3066\u3044\u308b\u578b\u30fb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u306a\u3044\u5834\u5408\u3001\u305d\u306e\u307e\u307e\u3060\u3068\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3067\u5f3e\u304b\u308c\u3066\u3057\u307e\u3044\u307e\u3059\u304c\u3001\u3053\u306e\u95a2\u6570\u3067\u8abf\u6574\u3092\u3057\u3066\u3042\u3052\u308b\u3053\u3068\u3067\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u304c\u901a\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n\n\u3067\u306f\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30af\u30e9\u30b9\u306b\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\u3002\u3053\u3061\u3089\u3082\u30c7\u30d0\u30c3\u30b0\u30d7\u30ea\u30f3\u30c8\u3092\u3059\u308b\u3060\u3051\u306e\u30e1\u30bd\u30c3\u30c9\u306b\u3057\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># serializers.py\nclass TestSerializer(serializers.ModelSerializer):\n    '''\u52d5\u4f5c\u78ba\u8a8d\u7528\u30c6\u30b9\u30c8\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6'''\n    class Meta:\n        model = TestModel\n        fields = ['bottom_limit', 'upper_limit']    \n\n    # \u65b0\u898f\u8ffd\u52a0\n    def to_internal_value(self, data):\n        print('\u2605\u3000 --- to_internal_value(): \u691c\u8a3c\u524d\u306e\u8abf\u6574')\n        return super().to_internal_value(data)\n\n    def validate_bottom_limit(self, value):\n        print('\u2461\u3000--- validate_bottom_limit(): \u4e0b\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c')\n        return value\n\n    def validate_upper_limit(self, value):\n        print('\u2461\u3000--- validate_upper_limit(): \u4e0a\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9aa\u691c\u8a3c')\n        return value\n\n    def validate(self, data):\n        print('\u2462\u3000--- validate(): \u4e0b\u9650\u5024\u30fb\u4e0a\u9650\u5024\u306e\u8907\u5408\u691c\u8a3c')\n        return data<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u3053\u308c\u3067\u518d\u5ea6POST\u3057\u3066\u307f\u308b\u3068\u4e0b\u8a18\u306e\u901a\u308a\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u304c\u59cb\u307e\u308b\u524d\u306b\u3053\u306e\u95a2\u6570\u304c\u547c\u3070\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>\u2605\u3000 --- to_internal_value(): \u691c\u8a3c\u524d\u306e\u8abf\u6574\n\u2460\u3000 --- TestValidator: \u30d0\u30ea\u30c7\u30fc\u30bf\u3067\u306e\u691c\u8a3c\n\u2461\u3000 --- validate_upper_limit(): \u4e0a\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c\n\u2460\u3000 --- TestValidator: \u30d0\u30ea\u30c7\u30fc\u30bf\u3067\u306e\u691c\u8a3c\n\u2461\u3000 --- validate_bottom_limit(): \u4e0b\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c\n\u2462\u3000 --- validate(): \u4e0b\u9650\u5024\u30fb\u4e0a\u9650\u5024\u306e\u8907\u5408\u691c\u8a3c<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:heading {\"level\":3} -->\n\n<h3 class=\"wp-block-heading\">\u5b9f\u969b\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/h3>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u4eca\u306e\u30e2\u30c7\u30eb\u306f\u3001\u300c\u6700\u5927\u5024\u300d\u3068\u300c\u6700\u5c0f\u5024\u300d\u304c\u5225\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u304b\u3089\u306f<code>\"&lt;\u6700\u5c0f\u5024&gt;-&lt;\u6700\u5927\u5024&gt;\"<\/code>\u306e\u3088\u3046\u306b1\u3064\u306e\u6587\u5b57\u5217\u30c7\u30fc\u30bf\u304b\u3089POST\u3055\u308c\u308b\u3068\u3044\u3046\u30b1\u30fc\u30b9\u3092\u60f3\u5b9a\u3057\u307e\u3059\u3002\u4eca\u306e\u5b9f\u88c5\u306e\u307e\u307e\u3060\u3068\u3001\u5f53\u7136\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>### \u4e0a\u9650\u5024\u30fb\u4e0b\u9650\u5024\u30c6\u30b9\u30c8 '1-10' \u3068\u3044\u30461\u3064\u306e\u6587\u5b57\u5217\u30c7\u30fc\u30bf\u3092\u9001\u308b\nPOST http:\/\/localhost:8000\/test\/\nContent-Type: application\/json\n\n{\n  \"limit\": \"5-10\"\n}<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u4e0b\u8a18\u306e\u901a\u308a\u3001\u30e2\u30c7\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b<code>upper_limit<\/code>\u304c<code>bottom_limit<\/code>\u7121\u3044\u306e\u3067BadRequest\u304c\u8fd4\u3063\u3066\u304d\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"id\":15037,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"335\" height=\"436\" class=\"wp-image-15037\" src=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829111301.png\" alt=\"\" srcset=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829111301.png 335w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829111301-231x300.png 231w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829111301-164x214.png 164w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829111301-200x260.png 200w\" sizes=\"(max-width: 335px) 100vw, 335px\" \/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n\n\u3053\u306e\u6642\u306e\u30ed\u30b0\u3092\u898b\u308b\u3068\u3001<code>to_internal_value()<\/code>\u307e\u3067\u306f\u5230\u9054\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>\u2605\u3000 --- to_internal_value(): \u691c\u8a3c\u524d\u306e\u8abf\u6574\nBad Request: \/test\/<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u306a\u306e\u3067\u3001<code>to_internal_value()<\/code>\u306e\u4e2d\u3067\u30c7\u30fc\u30bf\u306e\u5909\u63db\u30ed\u30b8\u30c3\u30af\u3092\u5b9f\u88c5\u3057\u307e\u3057\u3087\u3046\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code># serializers.py\nclass TestSerializer(serializers.ModelSerializer):\n    '''\u52d5\u4f5c\u78ba\u8a8d\u7528\u30c6\u30b9\u30c8\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6'''\n    class Meta:\n        model = TestModel\n        fields = ['bottom_limit', 'upper_limit']    \n\n    def to_internal_value(self, data):\n        print('\u2605\u3000 --- to_internal_value(): \u691c\u8a3c\u524d\u306e\u8abf\u6574')\n        # \u30ed\u30b8\u30c3\u30af\u3092\u8ffd\u52a0\n        new_data = data.copy()\n        limit = new_data.pop('limit')\n        if not limit:\n            # limit\u304c\u7a7a\u306e\u5834\u5408\u306f\u30a8\u30e9\u30fc\n            raise serializers.ValidationError(detail='\"limit\" is missing!')\n        try:\n            bottom, upper = map(int, limit.split('-'))\n        except ValueError:\n            # limit\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u304c\u4e0d\u6b63\u306a\u5834\u5408\u306f\u30a8\u30e9\u30fc\n            raise serializers.ValidationError(detail='\"limit\" format is invalid!')\n        new_data['bottom_limit'] = bottom\n        new_data['upper_limit'] = upper\n        return super().to_internal_value(new_data)\n\n    def validate_bottom_limit(self, value):\n        print('\u2461\u3000--- validate_bottom_limit(): \u4e0b\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c')\n        return value\n\n    def validate_upper_limit(self, value):\n        print('\u2461\u3000--- validate_upper_limit(): \u4e0a\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c')\n        return value\n\n    def validate(self, data):\n        print('\u2462\u3000--- validate(): \u4e0b\u9650\u5024\u30fb\u4e0a\u9650\u5024\u306e\u8907\u5408\u691c\u8a3c')\n        return data<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u3053\u308c\u3067 &#8220;limit&#8221; \u304c &#8220;upper_limit&#8221;\u3068 &#8220;bottom_limit&#8221;\u306e2\u3064\u306b\u5206\u5272\u3055\u308c\u308b\u306f\u305a\u306a\u306e\u3067\u3001\u518d\u5ea6&#8221;limit&#8221;\u3092POST\u3057\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"id\":15038,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"343\" height=\"353\" class=\"wp-image-15038\" src=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829112625.png\" alt=\"\" srcset=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829112625.png 343w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829112625-292x300.png 292w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829112625-208x214.png 208w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829112625-253x260.png 253w\" sizes=\"(max-width: 343px) 100vw, 343px\" \/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>\u2605\u3000 --- to_internal_value(): \u691c\u8a3c\u524d\u306e\u8abf\u6574\n\u2460\u3000 --- TestValidator: \u30d0\u30ea\u30c7\u30fc\u30bf\u3067\u306e\u691c\u8a3c\n\u2461\u3000 --- validate_upper_limit(): \u4e0a\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c\n\u2460\u3000 --- TestValidator: \u30d0\u30ea\u30c7\u30fc\u30bf\u3067\u306e\u691c\u8a3c\n\u2461\u3000 --- validate_bottom_limit(): \u4e0b\u9650\u5024\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c\n\u2462\u3000 --- validate(): \u4e0b\u9650\u5024\u30fb\u4e0a\u9650\u5024\u306e\u8907\u5408\u691c\u8a3c<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n201\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u8fd4\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u30ed\u30b0\u306b\u3082\u5168\u3066\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30ed\u30b0\u304c\u51fa\u529b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n\n<h2 class=\"wp-block-heading\">to_internal_value()\u306e\u6ce8\u610f\u70b9<\/h2>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u4e00\u4ef6\u4fbf\u5229\u305d\u3046\u306a\u95a2\u6570\u3067\u3059\u304c\u3001\u6ce8\u610f\u70b9\u304c1\u3064\u3002<code>to_internal_value()<\/code>\u306f\u30b7\u30ea\u30a2\u30e9\u30a4\u30b6\u30af\u30e9\u30b9\u306e\u30d9\u30fc\u30b9\u30af\u30e9\u30b9\u3067\u3042\u308b<code>Serializer<\/code>\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u5b50\u30af\u30e9\u30b9\u3067\u3042\u308b<code>TestSerializer<\/code>\u3067<code>to_internal_value()<\/code>\u3092\u5b9a\u7fa9\u3059\u308b\u3068\u3001\u30d9\u30fc\u30b9\u30af\u30e9\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u304c\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u3066\u3057\u307e\u3044\u307e\u3059\u3002\u5f93\u3063\u3066\u3001\u5b50\u30af\u30e9\u30b9\u5185\u3067<code>super().to_internal_value()<\/code>\u3092\u547c\u3073\u51fa\u3055\u306a\u3044\u3068\u3001\u60f3\u5b9a\u5916\u306e\u6319\u52d5\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n\n\u8a66\u3057\u306b\u3001\u89aa\u30af\u30e9\u30b9\u306e\u8a72\u5f53\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3055\u306a\u3044\u5b9f\u88c5\u306b\u3057\u3066\u307f\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>def to_internal_value(self, data):\n    print('\u2605\u3000 --- to_internal_value(): \u691c\u8a3c\u524d\u306e\u8abf\u6574')\n    new_data = data.copy()\n    limit = new_data.pop('limit')\n    if not limit:\n        # limit\u304c\u7a7a\u306e\u5834\u5408\u306f\u30a8\u30e9\u30fc\n        raise serializers.ValidationError(detail='\"limit\" is missing!')\n    try:\n        bottom, upper = map(int, limit.split('-'))\n    except ValueError:\n        # limit\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u304c\u4e0d\u6b63\u306a\u5834\u5408\u306f\u30a8\u30e9\u30fc\n        raise serializers.ValidationError(detail='\"limit\" format is invalid!')\n    new_data['bottom_limit'] = bottom\n    new_data['upper_limit'] = upperw\n    # return super().to_internal_value(new_data)\n    return new_data # -&gt; \u89aa\u30af\u30e9\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u547c\u3073\u51fa\u3055\u305a\u3001\u5358\u7d14\u306b\u6574\u5f62\u5f8c\u306edict\u3060\u3051\u3092\u8fd4\u3057\u3066\u307f\u308b<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u3053\u306e\u72b6\u614b\u3067API\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u767b\u9332\u306f\u554f\u984c\u306a\u304f\u3055\u308c\u308b\u306e\u3067\u3059\u304c\u3001\u30ed\u30b0\u3092\u898b\u308b\u3068\u3001\u2460\u306e\u30d0\u30ea\u30c7\u30fc\u30bf\u3068\u2461\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u691c\u8a3c\u304c\u8d70\u3063\u3066\u3044\u306a\u3044\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"id\":15045,\"sizeSlug\":\"full\",\"linkDestination\":\"none\"} -->\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"311\" height=\"346\" class=\"wp-image-15045\" src=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829114005.png\" alt=\"\" srcset=\"https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829114005.png 311w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829114005-270x300.png 270w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829114005-192x214.png 192w, https:\/\/www.ecomottblog.com\/wp-content\/uploads\/2024\/08\/Pasted-image-20240829114005-234x260.png 234w\" sizes=\"(max-width: 311px) 100vw, 311px\" \/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>\u2605\u3000 --- to_internal_value(): \u691c\u8a3c\u524d\u306e\u8abf\u6574\n\u2462\u3000 --- validate(): \u4e0b\u9650\u5024\u30fb\u4e0a\u9650\u5024\u306e\u8907\u5408\u691c\u8a3c<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u89aa\u30af\u30e9\u30b9\u3067\u3042\u308b<code>Serializer<\/code>\u306e\u8a72\u5f53\u30e1\u30bd\u30c3\u30c9\u3092\u898b\u3066\u307f\u308b\u3068\u3001\u3053\u306e\u95a2\u6570\u5185\u3067\u2460\u30d0\u30ea\u30c7\u30fc\u30bf\u3067\u306e\u691c\u8a3c\u3068\u2461\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u306e\u691c\u8a3c\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n\n<pre class=\"wp-block-code\"><code>def to_internal_value(self, data):\n    \"\"\"\n    Dict of native values &lt;- Dict of primitive datatypes.\n    \"\"\"\n    if not isinstance(data, Mapping):\n        message = self.error_messages['invalid'].format(\n            datatype=type(data).__name__\n        )\n        raise ValidationError({\n            api_settings.NON_FIELD_ERRORS_KEY: [message]\n        }, code='invalid')\n\n    ret = {}\n    errors = {}\n    fields = self._writable_fields\n\n    for field in fields:\n        validate_method = getattr(self, 'validate_' + field.field_name, None)\n        primitive_value = field.get_value(data)\n        try:\n            validated_value = field.run_validation(primitive_value) # -&gt; \u3053\u3053\u3067\u2460\u30d0\u30ea\u30c7\u30fc\u30bf\u3067\u306e\u691c\u8a3c\u5b9f\u884c\n            if validate_method is not None:\n                validated_value = validate_method(validated_value) # -&gt; \u3053\u3053\u3067\u2461\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u306e\u691c\u8a3c\u5b9f\u884c\n        except ValidationError as exc:\n            errors[field.field_name] = exc.detail\n        except DjangoValidationError as exc:\n            errors[field.field_name] = get_error_detail(exc)\n        except SkipField:\n            pass\n        else:\n            self.set_value(ret, field.source_attrs, validated_value)\n\n    if errors:\n        raise ValidationError(errors)\n\n    return ret<\/code><\/pre>\n\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n\n\u5f93\u3063\u3066\u3001\u3053\u306e\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u305f\u5b50\u30af\u30e9\u30b9\u3092\u5ba3\u8a00\u3057\u3066\u3001<code>to_internal_value()<\/code>\u3092\u5b9f\u88c5\u3059\u308b\u5834\u5408\u306f\u3001\u305d\u306e\u4e2d\u3067\u660e\u793a\u7684\u306b<code>super().to_internal_value()<\/code>\u3092\u547c\u3073\u51fa\u3055\u306a\u3044\u3068\u3001\u672c\u6765\u5b9f\u884c\u3055\u308c\u308b\u306f\u305a\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u304c\u884c\u308f\u308c\u305a\u3001\u610f\u56f3\u305b\u305a\u4e0d\u6b63\u30c7\u30fc\u30bf\u304c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n\n\u3053\u306e\u3042\u305f\u308a\u306e\u4ed5\u69d8\u3092\u3042\u307e\u308a\u8a73\u3057\u304f\u8abf\u3079\u305a\u306b\u5b9f\u88c5\u3092\u9032\u3081\u3066\u3044\u305f\u305b\u3044\u3067\u3001\u30cf\u30de\u3063\u305f\u7d4c\u9a13\u304c\u3042\u3063\u305f\u306e\u3067\u4eca\u56de\u5171\u6709\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3084\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u4fbf\u5229\u306a\u53cd\u9762\u3001\u305d\u306e\u4ed5\u69d8\u3092\u7406\u89e3\u3057\u3066\u304a\u304b\u306a\u3044\u3068\u60f3\u5b9a\u5916\u306e\u52d5\u304d\u3092\u898b\u305b\u308b\u306e\u3067\u3001\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3084\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u898b\u308b\u3053\u3068\u306e\u5927\u5207\u3055\u3092\u6539\u3081\u3066\u75db\u611f\u3057\u307e\u3057\u305f\u3002\n\n<br><br>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n\n\u30a8\u30b3\u30e2\u30c3\u30c8\u3067\u306f\u4e00\u7dd2\u306b\u30e2\u30ce\u3065\u304f\u308a\u3092\u3057\u3066\u3044\u304f\u4ef2\u9593\u3092\u968f\u6642\u52df\u96c6\u3057\u3066\u3044\u307e\u3059\u3002\u5f0a\u793e\u306b\u5c11\u3057\u3067\u3082\u8208\u5473\u304c\u3042\u308b\u65b9\u306f\u305c\u3072\u4e0b\u8a18\u306e\u63a1\u7528\u30da\u30fc\u30b8\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\uff01\n\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n\n&nbsp;\n\n&nbsp;\n\n<!-- \/wp:paragraph -->\n\n&nbsp;\n\n<!-- wp:html -->\n\n<div style=\"width: 100%; display: flex; justify-content: space-around; flex-wrap: wrap; margin-top: 2rem;\">\n<div style=\"display: block; width: 60%; border: solid 1px #1ABB9A; text-align: center;\"><a style=\"display: block; padding: 16px;\" href=\"https:\/\/www.ecomott.co.jp\/recruit\/\" target=\"_blank\" rel=\"noopener\">\u52df\u96c6\u8981\u9805\uff08\u5f53\u793eHP\uff09<\/a><\/div>\n<div style=\"display: block; width: 60%; border: solid 1px #1ABB9A; text-align: center; margin: 30px 0;\"><a style=\"display: block; padding: 16px;\" href=\"https:\/\/www.wantedly.com\/companies\/ecomott2\/projects\" target=\"_blank\" rel=\"noopener\">Wantedly<\/a><\/div>\n<\/div>\n\n<!-- \/wp:html -->","protected":false},"excerpt":{"rendered":"<p>\u3053\u3093\u306b\u3061\u306f\uff01\u958b\u767a\u90e8\u306e\u7c73\u68ee\u3067\u3059\uff01 \u73fe\u5728\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067Django Restframework\uff08\u4ee5\u4e0bDRF\uff09\u3092\u4f7f\u7528\u3057\u3066Web API\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002\u3068\u3066\u3082\u4fbf\u5229\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306a\u306e\u3067\u52b9\u7387\u7684\u306b\u958b\u767a\u3092\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u306e\u3067\u3059\u304c [&hellip;]<\/p>\n","protected":false},"author":121,"featured_media":15074,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[238,241,50],"_links":{"self":[{"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/posts\/14591"}],"collection":[{"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/users\/121"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14591"}],"version-history":[{"count":166,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/posts\/14591\/revisions"}],"predecessor-version":[{"id":15098,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/posts\/14591\/revisions\/15098"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=\/wp\/v2\/media\/15074"}],"wp:attachment":[{"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14591"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ecomottblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}