{"id":4720,"date":"2025-01-28T21:22:33","date_gmt":"2025-01-28T12:22:33","guid":{"rendered":"https:\/\/secondlife.lol\/?p=4720"},"modified":"2025-01-30T20:56:23","modified_gmt":"2025-01-30T11:56:23","slug":"django-models-advanced-techniques","status":"publish","type":"post","link":"https:\/\/secondlife.lol\/ja\/django-models-advanced-techniques\/","title":{"rendered":"Django Models\u306e\u8a73\u7d30: \u9ad8\u5ea6\u306a\u6a5f\u80fd\u3068\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u6cd5\u3092\u30de\u30b9\u30bf\u30fc\u3057\u3088\u3046"},"content":{"rendered":"<style>.kb-image4720_9f6097-22 .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}.kb-image4720_9f6097-22 img.kb-img, .kb-image4720_9f6097-22 .kb-img img{border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}<\/style>\n<div class=\"wp-block-kadence-image kb-image4720_9f6097-22\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"878\" height=\"233\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-1.jpg\" alt=\"Django Models \uc2ec\ud654 \uae30\ub2a5 \ucc38\uace0 \uc774\ubbf8\uc9c01\" class=\"kb-img wp-image-4737\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-1.jpg 878w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-1-300x80.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-1-600x159.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-1-768x204.jpg 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-1-18x5.jpg 18w\" sizes=\"(max-width: 878px) 100vw, 878px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u307f\u306a\u3055\u3093\u3001\u3053\u3093\u306b\u3061\u306f\uff01 <a href=\"https:\/\/secondlife.lol\/ja\/django-models-basics-database-structure-guide\/\" data-type=\"post\" data-id=\"4687\">Django Models\u306e\u57fa\u790e<\/a>\u3092\u8d8a\u3048\u3066\u3001\u3082\u3063\u3068\u6df1\u3044\u4e16\u754c\u3078\u4e00\u7dd2\u306b\u884c\u304d\u307e\u3057\u3087\u3046\u3002Django\u3092\u4f7f\u3063\u305f\u3053\u3068\u304c\u3042\u308b\u65b9\u306a\u3089\u3001Models\u304c\u3069\u308c\u307b\u3069\u30d1\u30ef\u30d5\u30eb\u306a\u3082\u306e\u304b\u3054\u5b58\u77e5\u3060\u3068\u601d\u3044\u307e\u3059\u3002 \u3057\u304b\u3057\u3001\u4eca\u65e5\u306f\u305d\u306e\u57fa\u672c\u3092\u8d8a\u3048\u3066\u3001\u3088\u308a\u6df1\u3044\u4e16\u754c\u3078\u3001 <a href=\"https:\/\/www.djangoproject.com\/\" target=\"_blank\" rel=\"noopener\">\u30b8\u30e3\u30f3\u30b4<\/a> Models\u306e\u6df1\u5316\u6a5f\u80fd\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u30ab\u30b9\u30bf\u30e0\u30de\u30cd\u30fc\u30b8\u30e3\u3001\u62bd\u8c61\u30e2\u30c7\u30eb\u3001\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6d3b\u7528\u3059\u308b<\/strong> \u306a\u3069\u3001\u5b9f\u6226\u3067\u5f79\u306b\u7acb\u3064\u30c6\u30af\u30cb\u30c3\u30af\u3092\u30b3\u30fc\u30c9\u4f8b\u3068\u4e00\u7dd2\u306b\u7c21\u5358\u306b\u8aac\u660e\u3057\u307e\u3059\u3002 \u3053\u306e\u8a18\u4e8b\u3092\u8aad\u3081\u3070\u3001\u7686\u3055\u3093\u3082Django Models\u3092\u30de\u30b9\u30bf\u30fc\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u306f\u305a\u3067\u3059\uff01<\/p>\n\n\n<style>.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title-wrap{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title-wrap{color:var(--global-palette2, #2B6CB0);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{color:var(--global-palette2, #2B6CB0);font-size:28px;font-weight:regular;font-style:normal;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap .kb-table-of-content-list{color:var(--global-palette1, #3182CE);line-height:2em;font-weight:regular;font-style:normal;margin-top:var(--global-kb-spacing-sm, 1.5rem);margin-right:0px;margin-bottom:0px;margin-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap .kb-table-of-content-list .kb-table-of-contents__entry:hover{color:var(--global-palette6, #718096);}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);}}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{font-size:28px;}}@media all and (max-width: 767px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{font-size:28px;}}<\/style>\n\n<style>.kb-image4720_daa7f7-54 .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}.kb-image4720_daa7f7-54 img.kb-img, .kb-image4720_daa7f7-54 .kb-img img{border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}<\/style>\n<div class=\"wp-block-kadence-image kb-image4720_daa7f7-54\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"886\" height=\"259\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-3.jpg\" alt=\"Django Models \uc2ec\ud654 \uae30\ub2a5 \ucc38\uace0 \uc774\ubbf8\uc9c01\" class=\"kb-img wp-image-4741\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-3.jpg 886w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-3-300x88.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-3-600x175.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-3-768x225.jpg 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-3-18x5.jpg 18w\" sizes=\"(max-width: 886px) 100vw, 886px\" \/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">1.Django\u30e2\u30c7\u30eb\u306e\u6df1\u5316\uff1a\u30ab\u30b9\u30bf\u30e0\u30de\u30cd\u30fc\u30b8\u30e3\u30fc(Custom Manager)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Django\u304c\u57fa\u672c\u7684\u306b\u63d0\u4f9b\u3059\u308b\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u8d85\u3048\u3066\u3001\u30ab\u30b9\u30bf\u30e0\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u4f7f\u3046\u3068\u3082\u3063\u3068\u67d4\u8edf\u306b\u30c7\u30fc\u30bf\u3092\u7167\u4f1a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u7279\u5b9a\u306e\u6761\u4ef6\u3092\u6e80\u305f\u3059\u30c7\u30fc\u30bf\u3060\u3051\u7167\u4f1a\u3059\u308b\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n<style>.kb-image4720_c844c1-be .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}.kb-image4720_c844c1-be img.kb-img, .kb-image4720_c844c1-be .kb-img img{border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}<\/style>\n<div class=\"wp-block-kadence-image kb-image4720_c844c1-be\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"822\" height=\"216\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-4.jpg\" alt=\"\ucee4\uc2a4\ud140 \ub9e4\ub2c8\uc800(Custom Manager) \uc774\ubbf8\uc9c0\" class=\"kb-img wp-image-4743\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-4.jpg 822w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-4-300x79.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-4-600x158.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-4-768x202.jpg 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-4-18x5.jpg 18w\" sizes=\"(max-width: 822px) 100vw, 822px\" \/><\/figure><\/div>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>from django.db import models\n\nclass PublishedManager(models.Manager)\uff1a\n    def get_queryset(self)\uff1a\n        return super().get_queryset().filter(status='published')\n\nclass Post(models.Model)\uff1a\n    title = models.CharField(max_length=200)\n    content = models.TextField()\n    status = models.CharField(max_length=10, choices=[('draft', 'Draft'), ('published', 'Published')])\n\n    objects = models.Manager() #\u57fa\u672c\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\n    published = PublishedManager() # \u30ab\u30b9\u30bf\u30e0\u30de\u30cd\u30fc\u30b8\u30e3\n\n    def __str__(self)\uff1a\n        return self.title<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u30b3\u30fc\u30c9\u89e3\u8aac<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li><strong><code>class PublishedManager(models.Manager)\uff1a<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>Django\u306e <code>\u30de\u30cd\u30fc\u30b8\u30e3\u30fc<\/code>\u3092\u7d99\u627f\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u30af\u30e9\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u3053\u306e\u30af\u30e9\u30b9\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7167\u4f1a\u6642\u3001\u7279\u5b9a\u306e\u6761\u4ef6\u3092\u9069\u7528\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u30af\u30a8\u30ea\u30bb\u30c3\u30c8\u3092\u8fd4\u3059\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u8a2d\u8a08\u3055\u308c\u307e\u3057\u305f\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>def get_queryset(self)\uff1a<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><code>get_queryset<\/code> \u30e1\u30bd\u30c3\u30c9\u306f\u30af\u30a8\u30ea\u30bb\u30c3\u30c8\u3092\u8fd4\u3059\u5f79\u5272\u3092\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong><code>return super().get_queryset().filter(status='published')<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u57fa\u672c\u30af\u30a8\u30ea\u30bb\u30c3\u30c8(<code>super().get_queryset()<\/code>)\u306b\u30d5\u30a3\u30eb\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u3066 <code>\u30b9\u30c6\u30fc\u30bf\u30b9<\/code> \u30d5\u30a3\u30fc\u30eb\u30c9\u5024\u304c <code>\u516c\u958b\u6e08\u307f<\/code>\u3067\u3042\u308b\u30c7\u30fc\u30bf\u306e\u307f\u3092\u7167\u4f1a\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u308a\u3001\u30ab\u30b9\u30bf\u30e0\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u304c\u9069\u7528\u3055\u308c\u305f\u30e2\u30c7\u30eb\u3067 <code>\u516c\u958b<\/code> \u72b6\u614b\u306e\u30c7\u30fc\u30bf\u306e\u307f\u3092\u9078\u629e\u7684\u306b\u7ba1\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>objects = models.Manager()<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30c7\u30eb\u306e\u57fa\u672c\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/code>\u306f\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u3092\u542b\u3080\u57fa\u672c\u7684\u306a\u30af\u30a8\u30ea\u30bb\u30c3\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3068\u4e00\u7dd2\u306b\u4f7f\u7528\u3057\u3066\u3001\u30e2\u30c7\u30eb\u306b\u69d8\u3005\u306a\u30c7\u30fc\u30bf\u7167\u4f1a\u65b9\u6cd5\u3092\u8ffd\u52a0\u7684\u306b\u63d0\u4f9b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>published = PublishedManager()<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30bf\u30e0\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u30e2\u30c7\u30eb\u306b\u63a5\u7d9a\u3057\u3066 <code>status='published'<\/code> \u6761\u4ef6\u304c\u9069\u7528\u3055\u308c\u305f\u30af\u30a8\u30ea\u30bb\u30c3\u30c8\u3092\u8fd4\u3059\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u3053\u306e\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u4f7f\u3046\u3068 <code>Post.published.all()<\/code>\u306e\u3088\u3046\u306a\u65b9\u6cd5\u3067\u7c21\u5358\u306b\u7279\u5b9a\u306e\u6761\u4ef6\u306b\u5408\u3046\u30c7\u30fc\u30bf\u3092\u7167\u4f1a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>class Post(models.Model)\uff1a<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30d6\u30ed\u30b0\u6295\u7a3f\u3092\u7ba1\u7406\u3059\u308b\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u3067\u3059\u3002<\/li>\n\n\n\n<li>\u4e3b\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a\n<ul class=\"wp-block-list\">\n<li><strong><code>\u30bf\u30a4\u30c8\u30eb<\/code><\/strong>: \u6295\u7a3f\u306e\u30bf\u30a4\u30c8\u30eb(<code>CharField<\/code>)\u3067\u3001\u6700\u5927\u9577\u306f200\u6587\u5b57\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong><code>\u5185\u5bb9<\/code><\/strong>: \u6295\u7a3f\u306e\u672c\u6587\u5185\u5bb9\u3092\u4fdd\u5b58\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9(<code>\u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9<\/code>)\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong><code>\u30b9\u30c6\u30fc\u30bf\u30b9<\/code><\/strong>: \u6295\u7a3f\u72b6\u6cc1(<code>\u30c9\u30e9\u30d5\u30c8<\/code> \u307e\u305f\u306f <code>\u516c\u958b<\/code>)\u3092\u4fdd\u5b58\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u3059\u3002 <code>\u9078\u629e\u80a2<\/code> \u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u53ef\u80fd\u306a\u5024\u3092\u5236\u9650\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>def __str__(self)\uff1a<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6587\u5b57\u5217\u3067\u8868\u73fe\u3059\u308b\u5834\u5408\u3001\u6295\u7a3f\u306e\u30bf\u30a4\u30c8\u30eb(<code>\u30bf\u30a4\u30c8\u30eb<\/code>)\u304c\u8fd4\u3055\u308c\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u4f8b\u3048\u3070\u3001Django\u306e\u7ba1\u7406\u8005\u30da\u30fc\u30b8\u3084\u30b7\u30a7\u30eb\u304b\u3089 <code>\u30dd\u30b9\u30c8<\/code> \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u51fa\u529b\u3059\u308b\u3068\u3001\u30bf\u30a4\u30c8\u30eb\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">2.Django\u30e2\u30c7\u30eb\u306e\u6df1\u5316\uff1a\u62bd\u8c61\u30e2\u30c7\u30eb(Abstract Model)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u62bd\u8c61\u30e2\u30c7\u30eb\u306f\u3001\u8907\u6570\u306e\u30e2\u30c7\u30eb\u3067\u5171\u901a\u306b\u4f7f\u7528\u3055\u308c\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u306e\u306b\u4fbf\u5229\u3067\u3059\u3002\u62bd\u8c61\u30e2\u30c7\u30eb\u3092\u7d99\u627f\u3059\u308b\u30e2\u30c7\u30eb\u306f\u3001\u62bd\u8c61\u30e2\u30c7\u30eb\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u81ea\u52d5\u7684\u306b\u542b\u3081\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n<style>.kb-image4720_a7b37a-52 .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}.kb-image4720_a7b37a-52 img.kb-img, .kb-image4720_a7b37a-52 .kb-img img{border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}<\/style>\n<div class=\"wp-block-kadence-image kb-image4720_a7b37a-52\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"698\" height=\"241\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-5.jpg\" alt=\"\ucd94\uc0c1 \ubaa8\ub378(Abstract Model) \uc774\ubbf8\uc9c0\" class=\"kb-img wp-image-4745\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-5.jpg 698w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-5-300x104.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-5-600x207.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/image-16-5-18x6.jpg 18w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/figure><\/div>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>class TimeStampedModel(models.Model)\uff1a\n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n\n    \u30af\u30e9\u30b9 Meta\uff1a\n        abstract = True\n\nclass Post(TimeStampedModel)\uff1a\n    title = models.CharField(max_length=200)\n    content = models.TextField()\n\n    def __str__(self)\uff1a\n        return self.title<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u30b3\u30fc\u30c9\u89e3\u8aac<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li><code>class TimeStampedModel(models.Model)<\/code>\u62bd\u8c61\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><code>created_at = models.DateTimeField(auto_now_add=True)<\/code>: \u30e2\u30c7\u30eb\u304c\u4f5c\u6210\u3055\u308c\u305f\u6642\u9593\u3092\u81ea\u52d5\u7684\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><code>updated_at = models.DateTimeField(auto_now=True)<\/code>:\u30e2\u30c7\u30eb\u304c\u66f4\u65b0\u3055\u308c\u305f\u6642\u9593\u3092\u81ea\u52d5\u7684\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><code>class Meta: abstract = True<\/code>: \u3053\u306e\u30e2\u30c7\u30eb\u306f\u62bd\u8c61\u30e2\u30c7\u30eb\u3067\u3042\u308b\u3053\u3068\u3092\u5ba3\u8a00\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><code>class Post(TimeStampedModel)<\/code>: <code>TimeStampedModel<\/code>\u3092\u7d99\u627f\u3059\u308b <code>\u30dd\u30b9\u30c8<\/code> \u30e2\u30c7\u30eb\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">3.Django\u30e2\u30c7\u30eb\u306e\u6df1\u5316\uff1a\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6d3b\u7528<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Django\u306f\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u540c\u6642\u306b\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u66f8\u304d\u8fbc\u307f\u5c02\u7528\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u5206\u96e2\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>class User(models.Model)\uff1a\n    name = models.CharField(max_length=100)\n    email = models.EmailField()\n\n    class Meta\uff1a\n        db_table = 'user'\n        using = 'default' #\u57fa\u672c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u3046\n\nclass Log(models.Model)\uff1a\n    action = models.CharField(max_length=100)\n    timestamp = models.DateTimeField(auto_now_add=True)\n\n    \u30af\u30e9\u30b9 Meta\uff1a\n        db_table = 'log'\n        using = 'logs_db' # \u5225\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u4f7f\u7528<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u30b3\u30fc\u30c9\u89e3\u8aac<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<ol class=\"wp-block-list\">\n<li><strong><code>\u30af\u30e9\u30b9 User(models.Model)\uff1a<\/code><\/strong><ul><li><strong>\u30e6\u30fc\u30b6\u30fc\u30c7\u30fc\u30bf\u306e\u7ba1\u7406<\/strong>\u3059\u308b\u305f\u3081\u306eDjango\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u3067\u3059\u3002<\/li><li>\u4e3b\u306b\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30e1\u30fc\u30eb\u60c5\u5831\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/li><li>\u4e3b\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<ul><li><strong><code>\u540d\u524d<\/code><\/strong>: \u6700\u5927100\u6587\u5b57\u307e\u3067\u4fdd\u5b58\u53ef\u80fd\u306a\u6587\u5b57\u578b\u30d5\u30a3\u30fc\u30eb\u30c9(<code>CharField<\/code>).<\/li><li><strong><code>\u30e1\u30fc\u30eb<\/code><\/strong>: \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u4fdd\u5b58\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9(<code>EmailField<\/code>)\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u304c\u81ea\u52d5\u7684\u306b\u9069\u7528\u3055\u308c\u307e\u3059\u3002<\/li><\/ul><\/li><\/ul><strong>\u30e1\u30bf\u30af\u30e9\u30b9<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong><code>db_table = 'user'<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u4f7f\u7528\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u540d\u3092 <code>'\u30e6\u30fc\u30b6\u30fc'<\/code>\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u30c6\u30fc\u30d6\u30eb\u540d\u304c\u81ea\u52d5\u7684\u306b\u751f\u6210\u3055\u308c\u308b\u57fa\u672c\u30eb\u30fc\u30eb(<code>appname_modelname<\/code>)\u306e\u4ee3\u308f\u308a\u306b\u6307\u5b9a\u3055\u308c\u305f\u540d\u524d\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>using = 'default'<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u3053\u306e\u30e2\u30c7\u30eb\u306f\u3001Django\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u57fa\u672c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9(<code>\u30c7\u30d5\u30a9\u30eb\u30c8<\/code>)\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong><code>class Log(models.Model)\uff1a<\/code><\/strong><ul><li><strong>\u30ed\u30b0\u30c7\u30fc\u30bf\u306e\u7ba1\u7406<\/strong>\u3059\u308b\u305f\u3081\u306eDjango\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u3067\u3059\u3002<\/li><li>\u4e3b\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<ul><li><strong><code>\u30a2\u30af\u30b7\u30e7\u30f3<\/code><\/strong>: \u6700\u5927100\u6587\u5b57\u307e\u3067\u4fdd\u5b58\u53ef\u80fd\u306a\u6587\u5b57\u578b\u30d5\u30a3\u30fc\u30eb\u30c9(<code>CharField<\/code>)\u3067\u3001\u7279\u5b9a\u306e\u64cd\u4f5c(\u4f8b\u3048\u3070\"login\"\u3001\"logout\"\u306a\u3069)\u306e\u8aac\u660e\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/li><li><strong><code>\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7<\/code><\/strong>: \u30bf\u30b9\u30af\u304c\u767a\u751f\u3057\u305f\u6642\u523b\u3092\u4fdd\u5b58\u3059\u308b\u65e5\u6642\u30d5\u30a3\u30fc\u30eb\u30c9(<code>DateTimeField<\/code>).<ul><li><code>auto_now_add=True<\/code>: \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u6700\u521d\u306b\u4f5c\u6210\u3055\u308c\u305f\u3068\u304d\u306b\u3001\u73fe\u5728\u306e\u6642\u523b\u3092\u81ea\u52d5\u7684\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/li><\/ul><\/li><\/ul><\/li><\/ul><strong>\u30e1\u30bf\u30af\u30e9\u30b9<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong><code>db_table = 'log'<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u4f7f\u7528\u3059\u308b\u30c6\u30fc\u30d6\u30eb\u540d\u3092 <code>'\u30ed\u30b0'<\/code>\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>using = 'logs_db'<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u3053\u306e\u30e2\u30c7\u30eb\u306f <code>'logs_db'<\/code>\u3068\u3044\u3046 <strong>\u5225\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9<\/strong>\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb(<code>settings.py<\/code>)\u3067 <code>'logs_db'<\/code>\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">\u4ed5\u4e0a\u3052<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u3088\u3046\u306bDjango Models\u306e\u6df1\u5316\u3055\u308c\u305f\u6a5f\u80fd\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3057\u305f\u3002 \u3053\u308c\u3067\u7686\u3055\u3093\u3082Django Models\u3092\u3082\u3063\u3068\u52b9\u679c\u7684\u306b\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 \u3055\u3089\u306b\u77e5\u308a\u305f\u3044\u3053\u3068\u304c\u3042\u308c\u3070\u3001\u30b3\u30e1\u30f3\u30c8\u3067\u8cea\u554f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e00\u7dd2\u306b\u52c9\u5f37\u3057\u307e\u3057\u3087\u3046\uff01\ud83d\ude0a(\u7b11)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">#\u7528\u8a9e\u89e3\u8aac<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30de\u30cd\u30fc\u30b8\u30e3\u30fc(Custom Manager)<\/strong>: \u7279\u5b9a\u306e\u6761\u4ef6\u306b\u5408\u3046\u30c7\u30fc\u30bf\u3060\u3051\u3092\u7167\u4f1a\u3067\u304d\u308b\u3088\u3046\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3002<\/li>\n\n\n\n<li><strong>\u62bd\u8c61\u30e2\u30c7\u30eb(Abstract Model)<\/strong>: \u8907\u6570\u306e\u30e2\u30c7\u30eb\u3067\u5171\u901a\u306b\u4f7f\u7528\u3055\u308c\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5b9a\u7fa9\u3059\u308b\u30e2\u30c7\u30eb\u3002<\/li>\n\n\n\n<li><strong>\u8907\u6570\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9(Multiple Databases)<\/strong>: 1\u3064\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u540c\u6642\u306b\u4f7f\u7528\u3059\u308b\u6280\u8853\u3002<\/li>\n<\/ol>","protected":false},"excerpt":{"rendered":"<p>\uc548\ub155\ud558\uc138\uc694, \uc5ec\ub7ec\ubd84! Django Models\uc758 \uae30\ucd08\ub97c \ub118\uc5b4, \ub354 \uae4a\uc774 \uc788\ub294 \uc138\uacc4\ub85c&#8230;<\/p>","protected":false},"author":3,"featured_media":4749,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[3],"tags":[831,834,832,722,833],"class_list":["post-4720","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python-coding","tag-django-models-","tag-django--","tag-832","tag-722","tag--django"],"taxonomy_info":{"category":[{"value":3,"label":"\ud30c\uc774\uc36c(Python)"}],"post_tag":[{"value":831,"label":"Django Models \uc2ec\ud654"},{"value":834,"label":"Django \uc2e4\uc804 \ud65c\uc6a9"},{"value":832,"label":"\uace0\uae09 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc124\uacc4"},{"value":722,"label":"\uc6f9 \uac1c\ubc1c"},{"value":833,"label":"\ud30c\uc774\uc36c Django"}]},"featured_image_src_large":["https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/01\/Django-Models-\uc2ec\ud654-\ud3ec\uc2a4\ud2b8-\uc378\ub124\uc77c-600x600.jpg",600,600,true],"author_info":{"display_name":"TERE","author_link":"https:\/\/secondlife.lol\/ja\/author\/tere\/"},"comment_info":0,"category_info":[{"term_id":3,"name":"\ud30c\uc774\uc36c(Python)","slug":"python-coding","term_group":0,"term_taxonomy_id":3,"taxonomy":"category","description":"","parent":20,"count":119,"filter":"raw","cat_ID":3,"category_count":119,"category_description":"","cat_name":"\ud30c\uc774\uc36c(Python)","category_nicename":"python-coding","category_parent":20}],"tag_info":[{"term_id":831,"name":"Django Models \uc2ec\ud654","slug":"django-models-%ec%8b%ac%ed%99%94","term_group":0,"term_taxonomy_id":832,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":834,"name":"Django \uc2e4\uc804 \ud65c\uc6a9","slug":"django-%ec%8b%a4%ec%a0%84-%ed%99%9c%ec%9a%a9","term_group":0,"term_taxonomy_id":834,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":832,"name":"\uace0\uae09 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc124\uacc4","slug":"%ea%b3%a0%ea%b8%89-%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4-%ec%84%a4%ea%b3%84","term_group":0,"term_taxonomy_id":831,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":722,"name":"\uc6f9 \uac1c\ubc1c","slug":"%ec%9b%b9-%ea%b0%9c%eb%b0%9c","term_group":0,"term_taxonomy_id":722,"taxonomy":"post_tag","description":"","parent":0,"count":8,"filter":"raw"},{"term_id":833,"name":"\ud30c\uc774\uc36c Django","slug":"%ed%8c%8c%ec%9d%b4%ec%8d%ac-django","term_group":0,"term_taxonomy_id":833,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts\/4720","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/comments?post=4720"}],"version-history":[{"count":9,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts\/4720\/revisions"}],"predecessor-version":[{"id":4831,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/posts\/4720\/revisions\/4831"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/media\/4749"}],"wp:attachment":[{"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/media?parent=4720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/categories?post=4720"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secondlife.lol\/ja\/wp-json\/wp\/v2\/tags?post=4720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}