{"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\/en\/django-models-advanced-techniques\/","title":{"rendered":"Django Models Deeper: Mastering Advanced Features and Practical Uses"},"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\">Hello, everyone! <a href=\"https:\/\/secondlife.lol\/en\/django-models-basics-database-structure-guide\/\" data-type=\"post\" data-id=\"4687\">Fundamentals of Django Models<\/a>and go deeper with us. If you've used Django, you know how powerful Models can be, but today we're going to go beyond the basics, <a href=\"https:\/\/www.djangoproject.com\/\" target=\"_blank\" rel=\"noopener\">Django<\/a> We're going to explore the Models deep features. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Leverage custom managers, abstract models, and multiple databases<\/strong> and other real-world techniques will be explained in a simple way with code examples. By the end of this post, you'll be able to master Django Models!<\/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 Models in depth: Custom Manager<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beyond the managers Django provides out of the box, custom managers give you more flexibility to retrieve data. For example, let's create a manager that only retrieves data that meets certain conditions.<\/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):\n    def get_queryset(self):\n        return super().get_queryset().filter(status='published')\n\nclass Post(models.Model):\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() # default manager\n    published = PublishedManager() # custom manager\n\n    def __str__(self):\n        return self.title<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Code commentary<\/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):<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>Django's <code>Manager<\/code>to define a custom manager class.<\/li>\n\n\n\n<li>This class is designed to allow you to apply specific conditions to a database lookup and return a custom queryset.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>def get_queryset(self):<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><code>get_queryset<\/code> method is responsible for returning the query set.<\/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>The default query set (<code>super().get_queryset()<\/code>) to add a filter to the <code>status<\/code> If the field value is <code>'published'<\/code>Set to lookup only data that is<\/li>\n\n\n\n<li>This method allows you to use the <code>published<\/code> You can selectively manage only the data in a state.<\/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>Define the default manager for the model.<\/li>\n\n\n\n<li><code>objects<\/code>provides a default queryset that includes all data.<\/li>\n\n\n\n<li>It can be used with custom managers to provide additional ways to view data in your model.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>published = PublishedManager()<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>Connect a custom manager to your model to create a <code>status='published'<\/code> Define a manager that returns a query set with conditions applied.<\/li>\n\n\n\n<li>With this manager, you can use the <code>Post.published.all()<\/code>to easily look up data that meets specific conditions.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>class Post(models.Model):<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>A model class that manages blog posts.<\/li>\n\n\n\n<li>The main fields are\n<ul class=\"wp-block-list\">\n<li><strong><code>title<\/code><\/strong>: The title of the post (<code>CharField<\/code>), with a maximum length of 200 characters.<\/li>\n\n\n\n<li><strong><code>content<\/code><\/strong>: The field that stores the body content of the post (<code>TextField<\/code>).<\/li>\n\n\n\n<li><strong><code>status<\/code><\/strong>: Post status (<code>draft<\/code> or <code>published<\/code>) to store the data. <code>choices<\/code> option to limit the possible values.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>def __str__(self):<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li>When representing an object as a string, you can use a post's title (<code>title<\/code>) to be returned.<\/li>\n\n\n\n<li>For example, from the Django admin page or shell, you can use the <code>Post<\/code> When you output an object, it displays a title.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">2. Django Models Deeper: Abstract Model<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Abstract models are useful for defining fields that are used in common across multiple models. Models that inherit from an abstract model will automatically include the fields from the abstract model.<\/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):\n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n\n    class Meta:\n        abstract = True\n\nclass Post(TimeStampedModel):\n    title = models.CharField(max_length=200)\n    content = models.TextField()\n\n    def __str__(self):\n        return self.title<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Code commentary<\/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>: Defines an abstract model class.<\/li>\n\n\n\n<li><code>created_at = models.DateTimeField(auto_now_add=True)<\/code>: Automatically save the time the model was created.<\/li>\n\n\n\n<li><code>updated_at = models.DateTimeField(auto_now=True)<\/code>: Automatically save the time the model was updated.<\/li>\n\n\n\n<li><code>class Meta: abstract = True<\/code>: Declares that this model is an abstract model.<\/li>\n\n\n\n<li><code>class Post(TimeStampedModel)<\/code>: <code>TimeStampedModel<\/code>which inherits from <code>Post<\/code> Define a model.<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">3. Deepening Django Models: Utilizing Multiple Databases<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Django can use multiple databases at the same time. For example, you can have a read-only database and a write-only database.<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>class User(models.Model):\n    name = models.CharField(max_length=100)\n    email = models.EmailField()\n\n    class Meta:\n        db_table = 'user'\n        using = 'default' use # default database\n\nclass Log(models.Model):\n    action = models.CharField(max_length=100)\n    timestamp = models.DateTimeField(auto_now_add=True)\n\n    class Meta:\n        db_table = 'log'\n        using = 'logs_db' # using a separate database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Code commentary<\/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>class User(models.Model):<\/code><\/strong><ul><li><strong>Manage user data<\/strong>A Django model class for creating and manipulating Django models.<\/li><li>It primarily stores username and email information.<\/li><li>The main fields are<ul><li><strong><code>name<\/code><\/strong>: A character field that can store up to 100 characters (<code>CharField<\/code>).<\/li><li><strong><code>email<\/code><\/strong>: The field that stores the email address (<code>EmailField<\/code>), validation is automatically applied.<\/li><\/ul><\/li><\/ul><strong>Meta Classes<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong><code>db_table = 'user'<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>Set the name of the table to use in the database to <code>'user'<\/code>to the default.<\/li>\n\n\n\n<li>The default rule for automatically generating table names (<code>appname_modelname<\/code>) instead of the specified name.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>using = 'default'<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>This model is based on the Django project's default database (<code>default<\/code>) in the following example.<\/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):<\/code><\/strong><ul><li><strong>Manage log data<\/strong>A Django model class for creating and manipulating Django models.<\/li><li>The main fields are<ul><li><strong><code>action<\/code><\/strong>: A character field that can store up to 100 characters (<code>CharField<\/code>), which stores a description of a specific action (e.g. \"login\", \"logout\").<\/li><li><strong><code>timestamp<\/code><\/strong>: A date-time field that stores when the action occurred (<code>DateTimeField<\/code>).<ul><li><code>auto_now_add=True<\/code>: Automatically save the current time when the object is first created.<\/li><\/ul><\/li><\/ul><\/li><\/ul><strong>Meta Classes<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong><code>db_table = 'log'<\/code><\/strong>:\n<ul class=\"wp-block-list\">\n<li>Set the name of the table to use in the database to <code>'log'<\/code>to the default.<\/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>This model is based on the <code>'logs_db'<\/code>called <strong>Separate databases<\/strong>to use the<\/li>\n\n\n\n<li>The project's configuration file (<code>settings.py<\/code>) in the <code>'logs_db'<\/code>must be defined.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Finalize<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now that you know the deeper features of Django Models, you should be able to use them more effectively. If you have any further questions, please leave them in the comments. Let's learn together! \ud83d\ude0a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"># Glossary<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Custom Manager<\/strong>A customized manager that allows you to retrieve only data that meets certain conditions.<\/li>\n\n\n\n<li><strong>Abstract Model<\/strong>A model that defines fields that are used in common across multiple models.<\/li>\n\n\n\n<li><strong>Multiple Databases<\/strong>A technique for using multiple databases simultaneously in one application.<\/li>\n<\/ol>","protected":false},"excerpt":{"rendered":"<p>Hello, everyone! Let's go beyond the basics of Django Models and dive deeper into the world of...<\/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\/en\/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\/en\/wp-json\/wp\/v2\/posts\/4720","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/comments?post=4720"}],"version-history":[{"count":9,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts\/4720\/revisions"}],"predecessor-version":[{"id":4831,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/posts\/4720\/revisions\/4831"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/media\/4749"}],"wp:attachment":[{"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/media?parent=4720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/categories?post=4720"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secondlife.lol\/en\/wp-json\/wp\/v2\/tags?post=4720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}