[{"data":1,"prerenderedAt":10860},["ShallowReactive",2],{"navigation":3,"/models-and-databases/relationships-and-foreign-keys":1016,"/models-and-databases/relationships-and-foreign-keys-surround":10855},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":268,"body":1018,"description":1028,"extension":10850,"links":10851,"meta":10852,"navigation":1139,"path":269,"seo":10853,"stem":270,"__hash__":10854},"docs/07.models-and-databases/04.relationships-and-foreign-keys.md",{"type":1019,"value":1020,"toc":10835},"minimark",[1021,1025,1029,1034,1037,1042,2228,2232,3346,3350,3353,3357,5121,5125,6459,6463,6466,6470,6993,6997,8600,8604,10828,10831],[1022,1023,268],"h1",{"id":1024},"relationships-and-foreign-keys",[1026,1027,1028],"p",{},"Django's ORM provides powerful tools for defining and working with relationships between models. Understanding how to properly design and implement relationships is crucial for creating efficient, maintainable database schemas.",[1030,1031,1033],"h2",{"id":1032},"one-to-one-relationships","One-to-One Relationships",[1026,1035,1036],{},"One-to-one relationships link exactly one record in one table to exactly one record in another table. This is useful for extending models or separating concerns.",[1038,1039,1041],"h3",{"id":1040},"basic-one-to-one-implementation","Basic One-to-One Implementation",[1043,1044,1049],"pre",{"className":1045,"code":1046,"language":1047,"meta":1048,"style":1048},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# models.py\nfrom django.db import models\nfrom django.contrib.auth.models import User\nfrom django.core.exceptions import ValidationError\n\nclass UserProfile(models.Model):\n    \"\"\"Extends the built-in User model with additional fields\"\"\"\n    \n    user = models.OneToOneField(\n        User,\n        on_delete=models.CASCADE,\n        related_name='profile'\n    )\n    \n    # Additional profile fields\n    bio = models.TextField(max_length=500, blank=True)\n    birth_date = models.DateField(null=True, blank=True)\n    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)\n    phone = models.CharField(max_length=20, blank=True)\n    website = models.URLField(blank=True)\n    \n    # Social media links\n    twitter_handle = models.CharField(max_length=50, blank=True)\n    linkedin_url = models.URLField(blank=True)\n    \n    # Preferences\n    email_notifications = models.BooleanField(default=True)\n    newsletter_subscription = models.BooleanField(default=False)\n    \n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n    \n    def __str__(self):\n        return f\"{self.user.username}'s Profile\"\n    \n    @property\n    def full_name(self):\n        return self.user.get_full_name() or self.user.username\n    \n    @property\n    def age(self):\n        if self.birth_date:\n            from django.utils import timezone\n            today = timezone.now().date()\n            return today.year - self.birth_date.year - (\n                (today.month, today.day) \u003C (self.birth_date.month, self.birth_date.day)\n            )\n        return None\n\n# Signal to automatically create profile when user is created\nfrom django.db.models.signals import post_save\nfrom django.dispatch import receiver\n\n@receiver(post_save, sender=User)\ndef create_user_profile(sender, instance, created, **kwargs):\n    if created:\n        UserProfile.objects.create(user=instance)\n\n@receiver(post_save, sender=User)\ndef save_user_profile(sender, instance, **kwargs):\n    if hasattr(instance, 'profile'):\n        instance.profile.save()\n\n# Usage examples:\n# user = User.objects.get(username='john')\n# profile = user.profile  # Access via related_name\n# user_from_profile = profile.user  # Reverse access\n","python","",[1050,1051,1052,1061,1085,1112,1134,1141,1167,1181,1187,1208,1217,1236,1255,1261,1266,1272,1313,1347,1395,1429,1455,1460,1466,1499,1523,1528,1534,1560,1585,1590,1616,1641,1646,1664,1700,1705,1715,1730,1765,1770,1777,1791,1807,1825,1850,1882,1938,1944,1952,1957,1963,1989,2006,2011,2037,2072,2082,2109,2114,2135,2159,2182,2199,2204,2210,2216,2222],"code",{"__ignoreMap":1048},[1053,1054,1057],"span",{"class":1055,"line":1056},"line",1,[1053,1058,1060],{"class":1059},"s9Tkl","# models.py\n",[1053,1062,1064,1068,1072,1076,1079,1082],{"class":1055,"line":1063},2,[1053,1065,1067],{"class":1066},"siDh9","from",[1053,1069,1071],{"class":1070},"sftqT"," django",[1053,1073,1075],{"class":1074},"soVBu",".",[1053,1077,1078],{"class":1070},"db ",[1053,1080,1081],{"class":1066},"import",[1053,1083,1084],{"class":1070}," models\n",[1053,1086,1088,1090,1092,1094,1097,1099,1102,1104,1107,1109],{"class":1055,"line":1087},3,[1053,1089,1067],{"class":1066},[1053,1091,1071],{"class":1070},[1053,1093,1075],{"class":1074},[1053,1095,1096],{"class":1070},"contrib",[1053,1098,1075],{"class":1074},[1053,1100,1101],{"class":1070},"auth",[1053,1103,1075],{"class":1074},[1053,1105,1106],{"class":1070},"models ",[1053,1108,1081],{"class":1066},[1053,1110,1111],{"class":1070}," User\n",[1053,1113,1115,1117,1119,1121,1124,1126,1129,1131],{"class":1055,"line":1114},4,[1053,1116,1067],{"class":1066},[1053,1118,1071],{"class":1070},[1053,1120,1075],{"class":1074},[1053,1122,1123],{"class":1070},"core",[1053,1125,1075],{"class":1074},[1053,1127,1128],{"class":1070},"exceptions ",[1053,1130,1081],{"class":1066},[1053,1132,1133],{"class":1070}," ValidationError\n",[1053,1135,1137],{"class":1055,"line":1136},5,[1053,1138,1140],{"emptyLinePlaceholder":1139},true,"\n",[1053,1142,1144,1148,1152,1155,1159,1161,1164],{"class":1055,"line":1143},6,[1053,1145,1147],{"class":1146},"s5Kfy","class",[1053,1149,1151],{"class":1150},"sD-vU"," UserProfile",[1053,1153,1154],{"class":1074},"(",[1053,1156,1158],{"class":1157},"sYn-s","models",[1053,1160,1075],{"class":1074},[1053,1162,1163],{"class":1157},"Model",[1053,1165,1166],{"class":1074},"):\n",[1053,1168,1170,1174,1178],{"class":1055,"line":1169},7,[1053,1171,1173],{"class":1172},"sm7ve","    \"\"\"",[1053,1175,1177],{"class":1176},"sVyVU","Extends the built-in User model with additional fields",[1053,1179,1180],{"class":1172},"\"\"\"\n",[1053,1182,1184],{"class":1055,"line":1183},8,[1053,1185,1186],{"class":1070},"    \n",[1053,1188,1190,1193,1196,1199,1201,1205],{"class":1055,"line":1189},9,[1053,1191,1192],{"class":1070},"    user ",[1053,1194,1195],{"class":1074},"=",[1053,1197,1198],{"class":1070}," models",[1053,1200,1075],{"class":1074},[1053,1202,1204],{"class":1203},"siWMO","OneToOneField",[1053,1206,1207],{"class":1074},"(\n",[1053,1209,1211,1214],{"class":1055,"line":1210},10,[1053,1212,1213],{"class":1203},"        User",[1053,1215,1216],{"class":1074},",\n",[1053,1218,1220,1224,1226,1228,1230,1234],{"class":1055,"line":1219},11,[1053,1221,1223],{"class":1222},"sqOPj","        on_delete",[1053,1225,1195],{"class":1074},[1053,1227,1158],{"class":1203},[1053,1229,1075],{"class":1074},[1053,1231,1233],{"class":1232},"sFGJz","CASCADE",[1053,1235,1216],{"class":1074},[1053,1237,1239,1242,1244,1248,1252],{"class":1055,"line":1238},12,[1053,1240,1241],{"class":1222},"        related_name",[1053,1243,1195],{"class":1074},[1053,1245,1247],{"class":1246},"sbYkP","'",[1053,1249,1251],{"class":1250},"sTbE_","profile",[1053,1253,1254],{"class":1246},"'\n",[1053,1256,1258],{"class":1055,"line":1257},13,[1053,1259,1260],{"class":1074},"    )\n",[1053,1262,1264],{"class":1055,"line":1263},14,[1053,1265,1186],{"class":1070},[1053,1267,1269],{"class":1055,"line":1268},15,[1053,1270,1271],{"class":1059},"    # Additional profile fields\n",[1053,1273,1275,1278,1280,1282,1284,1287,1289,1292,1294,1298,1301,1304,1306,1310],{"class":1055,"line":1274},16,[1053,1276,1277],{"class":1070},"    bio ",[1053,1279,1195],{"class":1074},[1053,1281,1198],{"class":1070},[1053,1283,1075],{"class":1074},[1053,1285,1286],{"class":1203},"TextField",[1053,1288,1154],{"class":1074},[1053,1290,1291],{"class":1222},"max_length",[1053,1293,1195],{"class":1074},[1053,1295,1297],{"class":1296},"s7CZa","500",[1053,1299,1300],{"class":1074},",",[1053,1302,1303],{"class":1222}," blank",[1053,1305,1195],{"class":1074},[1053,1307,1309],{"class":1308},"s8XtY","True",[1053,1311,1312],{"class":1074},")\n",[1053,1314,1316,1319,1321,1323,1325,1328,1330,1333,1335,1337,1339,1341,1343,1345],{"class":1055,"line":1315},17,[1053,1317,1318],{"class":1070},"    birth_date ",[1053,1320,1195],{"class":1074},[1053,1322,1198],{"class":1070},[1053,1324,1075],{"class":1074},[1053,1326,1327],{"class":1203},"DateField",[1053,1329,1154],{"class":1074},[1053,1331,1332],{"class":1222},"null",[1053,1334,1195],{"class":1074},[1053,1336,1309],{"class":1308},[1053,1338,1300],{"class":1074},[1053,1340,1303],{"class":1222},[1053,1342,1195],{"class":1074},[1053,1344,1309],{"class":1308},[1053,1346,1312],{"class":1074},[1053,1348,1350,1353,1355,1357,1359,1362,1364,1367,1369,1371,1374,1376,1378,1380,1382,1384,1386,1389,1391,1393],{"class":1055,"line":1349},18,[1053,1351,1352],{"class":1070},"    avatar ",[1053,1354,1195],{"class":1074},[1053,1356,1198],{"class":1070},[1053,1358,1075],{"class":1074},[1053,1360,1361],{"class":1203},"ImageField",[1053,1363,1154],{"class":1074},[1053,1365,1366],{"class":1222},"upload_to",[1053,1368,1195],{"class":1074},[1053,1370,1247],{"class":1246},[1053,1372,1373],{"class":1250},"avatars/",[1053,1375,1247],{"class":1246},[1053,1377,1300],{"class":1074},[1053,1379,1303],{"class":1222},[1053,1381,1195],{"class":1074},[1053,1383,1309],{"class":1308},[1053,1385,1300],{"class":1074},[1053,1387,1388],{"class":1222}," null",[1053,1390,1195],{"class":1074},[1053,1392,1309],{"class":1308},[1053,1394,1312],{"class":1074},[1053,1396,1398,1401,1403,1405,1407,1410,1412,1414,1416,1419,1421,1423,1425,1427],{"class":1055,"line":1397},19,[1053,1399,1400],{"class":1070},"    phone ",[1053,1402,1195],{"class":1074},[1053,1404,1198],{"class":1070},[1053,1406,1075],{"class":1074},[1053,1408,1409],{"class":1203},"CharField",[1053,1411,1154],{"class":1074},[1053,1413,1291],{"class":1222},[1053,1415,1195],{"class":1074},[1053,1417,1418],{"class":1296},"20",[1053,1420,1300],{"class":1074},[1053,1422,1303],{"class":1222},[1053,1424,1195],{"class":1074},[1053,1426,1309],{"class":1308},[1053,1428,1312],{"class":1074},[1053,1430,1432,1435,1437,1439,1441,1444,1446,1449,1451,1453],{"class":1055,"line":1431},20,[1053,1433,1434],{"class":1070},"    website ",[1053,1436,1195],{"class":1074},[1053,1438,1198],{"class":1070},[1053,1440,1075],{"class":1074},[1053,1442,1443],{"class":1203},"URLField",[1053,1445,1154],{"class":1074},[1053,1447,1448],{"class":1222},"blank",[1053,1450,1195],{"class":1074},[1053,1452,1309],{"class":1308},[1053,1454,1312],{"class":1074},[1053,1456,1458],{"class":1055,"line":1457},21,[1053,1459,1186],{"class":1070},[1053,1461,1463],{"class":1055,"line":1462},22,[1053,1464,1465],{"class":1059},"    # Social media links\n",[1053,1467,1469,1472,1474,1476,1478,1480,1482,1484,1486,1489,1491,1493,1495,1497],{"class":1055,"line":1468},23,[1053,1470,1471],{"class":1070},"    twitter_handle ",[1053,1473,1195],{"class":1074},[1053,1475,1198],{"class":1070},[1053,1477,1075],{"class":1074},[1053,1479,1409],{"class":1203},[1053,1481,1154],{"class":1074},[1053,1483,1291],{"class":1222},[1053,1485,1195],{"class":1074},[1053,1487,1488],{"class":1296},"50",[1053,1490,1300],{"class":1074},[1053,1492,1303],{"class":1222},[1053,1494,1195],{"class":1074},[1053,1496,1309],{"class":1308},[1053,1498,1312],{"class":1074},[1053,1500,1502,1505,1507,1509,1511,1513,1515,1517,1519,1521],{"class":1055,"line":1501},24,[1053,1503,1504],{"class":1070},"    linkedin_url ",[1053,1506,1195],{"class":1074},[1053,1508,1198],{"class":1070},[1053,1510,1075],{"class":1074},[1053,1512,1443],{"class":1203},[1053,1514,1154],{"class":1074},[1053,1516,1448],{"class":1222},[1053,1518,1195],{"class":1074},[1053,1520,1309],{"class":1308},[1053,1522,1312],{"class":1074},[1053,1524,1526],{"class":1055,"line":1525},25,[1053,1527,1186],{"class":1070},[1053,1529,1531],{"class":1055,"line":1530},26,[1053,1532,1533],{"class":1059},"    # Preferences\n",[1053,1535,1537,1540,1542,1544,1546,1549,1551,1554,1556,1558],{"class":1055,"line":1536},27,[1053,1538,1539],{"class":1070},"    email_notifications ",[1053,1541,1195],{"class":1074},[1053,1543,1198],{"class":1070},[1053,1545,1075],{"class":1074},[1053,1547,1548],{"class":1203},"BooleanField",[1053,1550,1154],{"class":1074},[1053,1552,1553],{"class":1222},"default",[1053,1555,1195],{"class":1074},[1053,1557,1309],{"class":1308},[1053,1559,1312],{"class":1074},[1053,1561,1563,1566,1568,1570,1572,1574,1576,1578,1580,1583],{"class":1055,"line":1562},28,[1053,1564,1565],{"class":1070},"    newsletter_subscription ",[1053,1567,1195],{"class":1074},[1053,1569,1198],{"class":1070},[1053,1571,1075],{"class":1074},[1053,1573,1548],{"class":1203},[1053,1575,1154],{"class":1074},[1053,1577,1553],{"class":1222},[1053,1579,1195],{"class":1074},[1053,1581,1582],{"class":1308},"False",[1053,1584,1312],{"class":1074},[1053,1586,1588],{"class":1055,"line":1587},29,[1053,1589,1186],{"class":1070},[1053,1591,1593,1596,1598,1600,1602,1605,1607,1610,1612,1614],{"class":1055,"line":1592},30,[1053,1594,1595],{"class":1070},"    created_at ",[1053,1597,1195],{"class":1074},[1053,1599,1198],{"class":1070},[1053,1601,1075],{"class":1074},[1053,1603,1604],{"class":1203},"DateTimeField",[1053,1606,1154],{"class":1074},[1053,1608,1609],{"class":1222},"auto_now_add",[1053,1611,1195],{"class":1074},[1053,1613,1309],{"class":1308},[1053,1615,1312],{"class":1074},[1053,1617,1619,1622,1624,1626,1628,1630,1632,1635,1637,1639],{"class":1055,"line":1618},31,[1053,1620,1621],{"class":1070},"    updated_at ",[1053,1623,1195],{"class":1074},[1053,1625,1198],{"class":1070},[1053,1627,1075],{"class":1074},[1053,1629,1604],{"class":1203},[1053,1631,1154],{"class":1074},[1053,1633,1634],{"class":1222},"auto_now",[1053,1636,1195],{"class":1074},[1053,1638,1309],{"class":1308},[1053,1640,1312],{"class":1074},[1053,1642,1644],{"class":1055,"line":1643},32,[1053,1645,1186],{"class":1070},[1053,1647,1649,1652,1656,1658,1662],{"class":1055,"line":1648},33,[1053,1650,1651],{"class":1146},"    def",[1053,1653,1655],{"class":1654},"sJdAF"," __str__",[1053,1657,1154],{"class":1074},[1053,1659,1661],{"class":1660},"sRjD_","self",[1053,1663,1166],{"class":1074},[1053,1665,1667,1670,1673,1676,1680,1683,1685,1689,1691,1694,1697],{"class":1055,"line":1666},34,[1053,1668,1669],{"class":1066},"        return",[1053,1671,1672],{"class":1146}," f",[1053,1674,1675],{"class":1250},"\"",[1053,1677,1679],{"class":1678},"s3h35","{",[1053,1681,1661],{"class":1682},"se3Ec",[1053,1684,1075],{"class":1074},[1053,1686,1688],{"class":1687},"sBPpx","user",[1053,1690,1075],{"class":1074},[1053,1692,1693],{"class":1687},"username",[1053,1695,1696],{"class":1678},"}",[1053,1698,1699],{"class":1250},"'s Profile\"\n",[1053,1701,1703],{"class":1055,"line":1702},35,[1053,1704,1186],{"class":1070},[1053,1706,1708,1711],{"class":1055,"line":1707},36,[1053,1709,1710],{"class":1074},"    @",[1053,1712,1714],{"class":1713},"sa2tF","property\n",[1053,1716,1718,1720,1724,1726,1728],{"class":1055,"line":1717},37,[1053,1719,1651],{"class":1146},[1053,1721,1723],{"class":1722},"sljsM"," full_name",[1053,1725,1154],{"class":1074},[1053,1727,1661],{"class":1660},[1053,1729,1166],{"class":1074},[1053,1731,1733,1735,1738,1740,1742,1744,1747,1750,1754,1756,1758,1760,1762],{"class":1055,"line":1732},38,[1053,1734,1669],{"class":1066},[1053,1736,1737],{"class":1682}," self",[1053,1739,1075],{"class":1074},[1053,1741,1688],{"class":1687},[1053,1743,1075],{"class":1074},[1053,1745,1746],{"class":1203},"get_full_name",[1053,1748,1749],{"class":1074},"()",[1053,1751,1753],{"class":1752},"sVsLi"," or",[1053,1755,1737],{"class":1682},[1053,1757,1075],{"class":1074},[1053,1759,1688],{"class":1687},[1053,1761,1075],{"class":1074},[1053,1763,1764],{"class":1687},"username\n",[1053,1766,1768],{"class":1055,"line":1767},39,[1053,1769,1186],{"class":1070},[1053,1771,1773,1775],{"class":1055,"line":1772},40,[1053,1774,1710],{"class":1074},[1053,1776,1714],{"class":1713},[1053,1778,1780,1782,1785,1787,1789],{"class":1055,"line":1779},41,[1053,1781,1651],{"class":1146},[1053,1783,1784],{"class":1722}," age",[1053,1786,1154],{"class":1074},[1053,1788,1661],{"class":1660},[1053,1790,1166],{"class":1074},[1053,1792,1794,1797,1799,1801,1804],{"class":1055,"line":1793},42,[1053,1795,1796],{"class":1066},"        if",[1053,1798,1737],{"class":1682},[1053,1800,1075],{"class":1074},[1053,1802,1803],{"class":1687},"birth_date",[1053,1805,1806],{"class":1074},":\n",[1053,1808,1810,1813,1815,1817,1820,1822],{"class":1055,"line":1809},43,[1053,1811,1812],{"class":1066},"            from",[1053,1814,1071],{"class":1070},[1053,1816,1075],{"class":1074},[1053,1818,1819],{"class":1070},"utils ",[1053,1821,1081],{"class":1066},[1053,1823,1824],{"class":1070}," timezone\n",[1053,1826,1828,1831,1833,1836,1838,1841,1844,1847],{"class":1055,"line":1827},44,[1053,1829,1830],{"class":1070},"            today ",[1053,1832,1195],{"class":1074},[1053,1834,1835],{"class":1070}," timezone",[1053,1837,1075],{"class":1074},[1053,1839,1840],{"class":1203},"now",[1053,1842,1843],{"class":1074},"().",[1053,1845,1846],{"class":1203},"date",[1053,1848,1849],{"class":1074},"()\n",[1053,1851,1853,1856,1859,1861,1864,1867,1869,1871,1873,1875,1877,1879],{"class":1055,"line":1852},45,[1053,1854,1855],{"class":1066},"            return",[1053,1857,1858],{"class":1070}," today",[1053,1860,1075],{"class":1074},[1053,1862,1863],{"class":1687},"year",[1053,1865,1866],{"class":1752}," -",[1053,1868,1737],{"class":1682},[1053,1870,1075],{"class":1074},[1053,1872,1803],{"class":1687},[1053,1874,1075],{"class":1074},[1053,1876,1863],{"class":1687},[1053,1878,1866],{"class":1752},[1053,1880,1881],{"class":1074}," (\n",[1053,1883,1885,1888,1891,1893,1896,1898,1900,1902,1905,1908,1911,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934,1936],{"class":1055,"line":1884},46,[1053,1886,1887],{"class":1074},"                (",[1053,1889,1890],{"class":1070},"today",[1053,1892,1075],{"class":1074},[1053,1894,1895],{"class":1687},"month",[1053,1897,1300],{"class":1074},[1053,1899,1858],{"class":1070},[1053,1901,1075],{"class":1074},[1053,1903,1904],{"class":1687},"day",[1053,1906,1907],{"class":1074},")",[1053,1909,1910],{"class":1752}," \u003C",[1053,1912,1913],{"class":1074}," (",[1053,1915,1661],{"class":1682},[1053,1917,1075],{"class":1074},[1053,1919,1803],{"class":1687},[1053,1921,1075],{"class":1074},[1053,1923,1895],{"class":1687},[1053,1925,1300],{"class":1074},[1053,1927,1737],{"class":1682},[1053,1929,1075],{"class":1074},[1053,1931,1803],{"class":1687},[1053,1933,1075],{"class":1074},[1053,1935,1904],{"class":1687},[1053,1937,1312],{"class":1074},[1053,1939,1941],{"class":1055,"line":1940},47,[1053,1942,1943],{"class":1074},"            )\n",[1053,1945,1947,1949],{"class":1055,"line":1946},48,[1053,1948,1669],{"class":1066},[1053,1950,1951],{"class":1308}," None\n",[1053,1953,1955],{"class":1055,"line":1954},49,[1053,1956,1140],{"emptyLinePlaceholder":1139},[1053,1958,1960],{"class":1055,"line":1959},50,[1053,1961,1962],{"class":1059},"# Signal to automatically create profile when user is created\n",[1053,1964,1966,1968,1970,1972,1975,1977,1979,1981,1984,1986],{"class":1055,"line":1965},51,[1053,1967,1067],{"class":1066},[1053,1969,1071],{"class":1070},[1053,1971,1075],{"class":1074},[1053,1973,1974],{"class":1070},"db",[1053,1976,1075],{"class":1074},[1053,1978,1158],{"class":1070},[1053,1980,1075],{"class":1074},[1053,1982,1983],{"class":1070},"signals ",[1053,1985,1081],{"class":1066},[1053,1987,1988],{"class":1070}," post_save\n",[1053,1990,1992,1994,1996,1998,2001,2003],{"class":1055,"line":1991},52,[1053,1993,1067],{"class":1066},[1053,1995,1071],{"class":1070},[1053,1997,1075],{"class":1074},[1053,1999,2000],{"class":1070},"dispatch ",[1053,2002,1081],{"class":1066},[1053,2004,2005],{"class":1070}," receiver\n",[1053,2007,2009],{"class":1055,"line":2008},53,[1053,2010,1140],{"emptyLinePlaceholder":1139},[1053,2012,2014,2017,2020,2022,2025,2027,2030,2032,2035],{"class":1055,"line":2013},54,[1053,2015,2016],{"class":1074},"@",[1053,2018,2019],{"class":1722},"receiver",[1053,2021,1154],{"class":1074},[1053,2023,2024],{"class":1203},"post_save",[1053,2026,1300],{"class":1074},[1053,2028,2029],{"class":1222}," sender",[1053,2031,1195],{"class":1074},[1053,2033,2034],{"class":1203},"User",[1053,2036,1312],{"class":1074},[1053,2038,2040,2043,2046,2048,2052,2054,2057,2059,2062,2064,2067,2070],{"class":1055,"line":2039},55,[1053,2041,2042],{"class":1146},"def",[1053,2044,2045],{"class":1722}," create_user_profile",[1053,2047,1154],{"class":1074},[1053,2049,2051],{"class":2050},"sCyAa","sender",[1053,2053,1300],{"class":1074},[1053,2055,2056],{"class":2050}," instance",[1053,2058,1300],{"class":1074},[1053,2060,2061],{"class":2050}," created",[1053,2063,1300],{"class":1074},[1053,2065,2066],{"class":1752}," **",[1053,2068,2069],{"class":2050},"kwargs",[1053,2071,1166],{"class":1074},[1053,2073,2075,2078,2080],{"class":1055,"line":2074},56,[1053,2076,2077],{"class":1066},"    if",[1053,2079,2061],{"class":1070},[1053,2081,1806],{"class":1074},[1053,2083,2085,2088,2090,2093,2095,2098,2100,2102,2104,2107],{"class":1055,"line":2084},57,[1053,2086,2087],{"class":1070},"        UserProfile",[1053,2089,1075],{"class":1074},[1053,2091,2092],{"class":1687},"objects",[1053,2094,1075],{"class":1074},[1053,2096,2097],{"class":1203},"create",[1053,2099,1154],{"class":1074},[1053,2101,1688],{"class":1222},[1053,2103,1195],{"class":1074},[1053,2105,2106],{"class":1203},"instance",[1053,2108,1312],{"class":1074},[1053,2110,2112],{"class":1055,"line":2111},58,[1053,2113,1140],{"emptyLinePlaceholder":1139},[1053,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133],{"class":1055,"line":2116},59,[1053,2118,2016],{"class":1074},[1053,2120,2019],{"class":1722},[1053,2122,1154],{"class":1074},[1053,2124,2024],{"class":1203},[1053,2126,1300],{"class":1074},[1053,2128,2029],{"class":1222},[1053,2130,1195],{"class":1074},[1053,2132,2034],{"class":1203},[1053,2134,1312],{"class":1074},[1053,2136,2138,2140,2143,2145,2147,2149,2151,2153,2155,2157],{"class":1055,"line":2137},60,[1053,2139,2042],{"class":1146},[1053,2141,2142],{"class":1722}," save_user_profile",[1053,2144,1154],{"class":1074},[1053,2146,2051],{"class":2050},[1053,2148,1300],{"class":1074},[1053,2150,2056],{"class":2050},[1053,2152,1300],{"class":1074},[1053,2154,2066],{"class":1752},[1053,2156,2069],{"class":2050},[1053,2158,1166],{"class":1074},[1053,2160,2162,2164,2167,2169,2171,2173,2176,2178,2180],{"class":1055,"line":2161},61,[1053,2163,2077],{"class":1066},[1053,2165,2166],{"class":1654}," hasattr",[1053,2168,1154],{"class":1074},[1053,2170,2106],{"class":1203},[1053,2172,1300],{"class":1074},[1053,2174,2175],{"class":1246}," '",[1053,2177,1251],{"class":1250},[1053,2179,1247],{"class":1246},[1053,2181,1166],{"class":1074},[1053,2183,2185,2188,2190,2192,2194,2197],{"class":1055,"line":2184},62,[1053,2186,2187],{"class":1070},"        instance",[1053,2189,1075],{"class":1074},[1053,2191,1251],{"class":1687},[1053,2193,1075],{"class":1074},[1053,2195,2196],{"class":1203},"save",[1053,2198,1849],{"class":1074},[1053,2200,2202],{"class":1055,"line":2201},63,[1053,2203,1140],{"emptyLinePlaceholder":1139},[1053,2205,2207],{"class":1055,"line":2206},64,[1053,2208,2209],{"class":1059},"# Usage examples:\n",[1053,2211,2213],{"class":1055,"line":2212},65,[1053,2214,2215],{"class":1059},"# user = User.objects.get(username='john')\n",[1053,2217,2219],{"class":1055,"line":2218},66,[1053,2220,2221],{"class":1059},"# profile = user.profile  # Access via related_name\n",[1053,2223,2225],{"class":1055,"line":2224},67,[1053,2226,2227],{"class":1059},"# user_from_profile = profile.user  # Reverse access\n",[1038,2229,2231],{"id":2230},"advanced-one-to-one-patterns","Advanced One-to-One Patterns",[1043,2233,2235],{"className":1045,"code":2234,"language":1047,"meta":1048,"style":1048},"# models.py\nfrom django.db import models\n\nclass Company(models.Model):\n    name = models.CharField(max_length=200)\n    founded_date = models.DateField()\n    \n    def __str__(self):\n        return self.name\n\nclass CompanySettings(models.Model):\n    \"\"\"Company-specific configuration settings\"\"\"\n    \n    company = models.OneToOneField(\n        Company,\n        on_delete=models.CASCADE,\n        related_name='settings'\n    )\n    \n    # Business settings\n    business_hours_start = models.TimeField(default='09:00')\n    business_hours_end = models.TimeField(default='17:00')\n    timezone = models.CharField(max_length=50, default='UTC')\n    \n    # Notification settings\n    email_notifications = models.BooleanField(default=True)\n    sms_notifications = models.BooleanField(default=False)\n    \n    # API settings\n    api_rate_limit = models.PositiveIntegerField(default=1000)\n    api_key = models.CharField(max_length=64, unique=True, editable=False)\n    \n    def save(self, *args, **kwargs):\n        if not self.api_key:\n            import secrets\n            self.api_key = secrets.token_hex(32)\n        super().save(*args, **kwargs)\n\nclass Employee(models.Model):\n    company = models.ForeignKey(Company, on_delete=models.CASCADE)\n    first_name = models.CharField(max_length=50)\n    last_name = models.CharField(max_length=50)\n    email = models.EmailField(unique=True)\n    \n    def __str__(self):\n        return f\"{self.first_name} {self.last_name}\"\n\nclass EmployeeDetails(models.Model):\n    \"\"\"Extended employee information\"\"\"\n    \n    employee = models.OneToOneField(\n        Employee,\n        on_delete=models.CASCADE,\n        related_name='details'\n    )\n    \n    # Personal details\n    employee_id = models.CharField(max_length=20, unique=True)\n    hire_date = models.DateField()\n    department = models.CharField(max_length=100)\n    position = models.CharField(max_length=100)\n    salary = models.DecimalField(max_digits=10, decimal_places=2)\n    \n    # Emergency contact\n    emergency_contact_name = models.CharField(max_length=100)\n    emergency_contact_phone = models.CharField(max_length=20)\n    \n    # Benefits\n    health_insurance = models.BooleanField(default=True)\n    dental_insurance = models.BooleanField(default=False)\n    retirement_plan = models.BooleanField(default=True)\n    \n    def __str__(self):\n        return f\"Details for {self.employee}\"\n",[1050,2236,2237,2241,2255,2259,2276,2300,2315,2319,2331,2342,2346,2363,2372,2376,2391,2398,2412,2425,2429,2433,2438,2467,2495,2532,2536,2541,2563,2586,2590,2595,2620,2662,2666,2693,2709,2717,2744,2768,2772,2789,2822,2845,2868,2893,2897,2909,2943,2947,2964,2973,2977,2992,2999,3013,3026,3030,3034,3039,3070,3085,3109,3132,3168,3172,3177,3200,3223,3227,3233,3257,3281,3305,3310,3323],{"__ignoreMap":1048},[1053,2238,2239],{"class":1055,"line":1056},[1053,2240,1060],{"class":1059},[1053,2242,2243,2245,2247,2249,2251,2253],{"class":1055,"line":1063},[1053,2244,1067],{"class":1066},[1053,2246,1071],{"class":1070},[1053,2248,1075],{"class":1074},[1053,2250,1078],{"class":1070},[1053,2252,1081],{"class":1066},[1053,2254,1084],{"class":1070},[1053,2256,2257],{"class":1055,"line":1087},[1053,2258,1140],{"emptyLinePlaceholder":1139},[1053,2260,2261,2263,2266,2268,2270,2272,2274],{"class":1055,"line":1114},[1053,2262,1147],{"class":1146},[1053,2264,2265],{"class":1150}," Company",[1053,2267,1154],{"class":1074},[1053,2269,1158],{"class":1157},[1053,2271,1075],{"class":1074},[1053,2273,1163],{"class":1157},[1053,2275,1166],{"class":1074},[1053,2277,2278,2281,2283,2285,2287,2289,2291,2293,2295,2298],{"class":1055,"line":1136},[1053,2279,2280],{"class":1070},"    name ",[1053,2282,1195],{"class":1074},[1053,2284,1198],{"class":1070},[1053,2286,1075],{"class":1074},[1053,2288,1409],{"class":1203},[1053,2290,1154],{"class":1074},[1053,2292,1291],{"class":1222},[1053,2294,1195],{"class":1074},[1053,2296,2297],{"class":1296},"200",[1053,2299,1312],{"class":1074},[1053,2301,2302,2305,2307,2309,2311,2313],{"class":1055,"line":1143},[1053,2303,2304],{"class":1070},"    founded_date ",[1053,2306,1195],{"class":1074},[1053,2308,1198],{"class":1070},[1053,2310,1075],{"class":1074},[1053,2312,1327],{"class":1203},[1053,2314,1849],{"class":1074},[1053,2316,2317],{"class":1055,"line":1169},[1053,2318,1186],{"class":1070},[1053,2320,2321,2323,2325,2327,2329],{"class":1055,"line":1183},[1053,2322,1651],{"class":1146},[1053,2324,1655],{"class":1654},[1053,2326,1154],{"class":1074},[1053,2328,1661],{"class":1660},[1053,2330,1166],{"class":1074},[1053,2332,2333,2335,2337,2339],{"class":1055,"line":1189},[1053,2334,1669],{"class":1066},[1053,2336,1737],{"class":1682},[1053,2338,1075],{"class":1074},[1053,2340,2341],{"class":1687},"name\n",[1053,2343,2344],{"class":1055,"line":1210},[1053,2345,1140],{"emptyLinePlaceholder":1139},[1053,2347,2348,2350,2353,2355,2357,2359,2361],{"class":1055,"line":1219},[1053,2349,1147],{"class":1146},[1053,2351,2352],{"class":1150}," CompanySettings",[1053,2354,1154],{"class":1074},[1053,2356,1158],{"class":1157},[1053,2358,1075],{"class":1074},[1053,2360,1163],{"class":1157},[1053,2362,1166],{"class":1074},[1053,2364,2365,2367,2370],{"class":1055,"line":1238},[1053,2366,1173],{"class":1172},[1053,2368,2369],{"class":1176},"Company-specific configuration settings",[1053,2371,1180],{"class":1172},[1053,2373,2374],{"class":1055,"line":1257},[1053,2375,1186],{"class":1070},[1053,2377,2378,2381,2383,2385,2387,2389],{"class":1055,"line":1263},[1053,2379,2380],{"class":1070},"    company ",[1053,2382,1195],{"class":1074},[1053,2384,1198],{"class":1070},[1053,2386,1075],{"class":1074},[1053,2388,1204],{"class":1203},[1053,2390,1207],{"class":1074},[1053,2392,2393,2396],{"class":1055,"line":1268},[1053,2394,2395],{"class":1203},"        Company",[1053,2397,1216],{"class":1074},[1053,2399,2400,2402,2404,2406,2408,2410],{"class":1055,"line":1274},[1053,2401,1223],{"class":1222},[1053,2403,1195],{"class":1074},[1053,2405,1158],{"class":1203},[1053,2407,1075],{"class":1074},[1053,2409,1233],{"class":1232},[1053,2411,1216],{"class":1074},[1053,2413,2414,2416,2418,2420,2423],{"class":1055,"line":1315},[1053,2415,1241],{"class":1222},[1053,2417,1195],{"class":1074},[1053,2419,1247],{"class":1246},[1053,2421,2422],{"class":1250},"settings",[1053,2424,1254],{"class":1246},[1053,2426,2427],{"class":1055,"line":1349},[1053,2428,1260],{"class":1074},[1053,2430,2431],{"class":1055,"line":1397},[1053,2432,1186],{"class":1070},[1053,2434,2435],{"class":1055,"line":1431},[1053,2436,2437],{"class":1059},"    # Business settings\n",[1053,2439,2440,2443,2445,2447,2449,2452,2454,2456,2458,2460,2463,2465],{"class":1055,"line":1457},[1053,2441,2442],{"class":1070},"    business_hours_start ",[1053,2444,1195],{"class":1074},[1053,2446,1198],{"class":1070},[1053,2448,1075],{"class":1074},[1053,2450,2451],{"class":1203},"TimeField",[1053,2453,1154],{"class":1074},[1053,2455,1553],{"class":1222},[1053,2457,1195],{"class":1074},[1053,2459,1247],{"class":1246},[1053,2461,2462],{"class":1250},"09:00",[1053,2464,1247],{"class":1246},[1053,2466,1312],{"class":1074},[1053,2468,2469,2472,2474,2476,2478,2480,2482,2484,2486,2488,2491,2493],{"class":1055,"line":1462},[1053,2470,2471],{"class":1070},"    business_hours_end ",[1053,2473,1195],{"class":1074},[1053,2475,1198],{"class":1070},[1053,2477,1075],{"class":1074},[1053,2479,2451],{"class":1203},[1053,2481,1154],{"class":1074},[1053,2483,1553],{"class":1222},[1053,2485,1195],{"class":1074},[1053,2487,1247],{"class":1246},[1053,2489,2490],{"class":1250},"17:00",[1053,2492,1247],{"class":1246},[1053,2494,1312],{"class":1074},[1053,2496,2497,2500,2502,2504,2506,2508,2510,2512,2514,2516,2518,2521,2523,2525,2528,2530],{"class":1055,"line":1468},[1053,2498,2499],{"class":1070},"    timezone ",[1053,2501,1195],{"class":1074},[1053,2503,1198],{"class":1070},[1053,2505,1075],{"class":1074},[1053,2507,1409],{"class":1203},[1053,2509,1154],{"class":1074},[1053,2511,1291],{"class":1222},[1053,2513,1195],{"class":1074},[1053,2515,1488],{"class":1296},[1053,2517,1300],{"class":1074},[1053,2519,2520],{"class":1222}," default",[1053,2522,1195],{"class":1074},[1053,2524,1247],{"class":1246},[1053,2526,2527],{"class":1250},"UTC",[1053,2529,1247],{"class":1246},[1053,2531,1312],{"class":1074},[1053,2533,2534],{"class":1055,"line":1501},[1053,2535,1186],{"class":1070},[1053,2537,2538],{"class":1055,"line":1525},[1053,2539,2540],{"class":1059},"    # Notification settings\n",[1053,2542,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561],{"class":1055,"line":1530},[1053,2544,1539],{"class":1070},[1053,2546,1195],{"class":1074},[1053,2548,1198],{"class":1070},[1053,2550,1075],{"class":1074},[1053,2552,1548],{"class":1203},[1053,2554,1154],{"class":1074},[1053,2556,1553],{"class":1222},[1053,2558,1195],{"class":1074},[1053,2560,1309],{"class":1308},[1053,2562,1312],{"class":1074},[1053,2564,2565,2568,2570,2572,2574,2576,2578,2580,2582,2584],{"class":1055,"line":1536},[1053,2566,2567],{"class":1070},"    sms_notifications ",[1053,2569,1195],{"class":1074},[1053,2571,1198],{"class":1070},[1053,2573,1075],{"class":1074},[1053,2575,1548],{"class":1203},[1053,2577,1154],{"class":1074},[1053,2579,1553],{"class":1222},[1053,2581,1195],{"class":1074},[1053,2583,1582],{"class":1308},[1053,2585,1312],{"class":1074},[1053,2587,2588],{"class":1055,"line":1562},[1053,2589,1186],{"class":1070},[1053,2591,2592],{"class":1055,"line":1587},[1053,2593,2594],{"class":1059},"    # API settings\n",[1053,2596,2597,2600,2602,2604,2606,2609,2611,2613,2615,2618],{"class":1055,"line":1592},[1053,2598,2599],{"class":1070},"    api_rate_limit ",[1053,2601,1195],{"class":1074},[1053,2603,1198],{"class":1070},[1053,2605,1075],{"class":1074},[1053,2607,2608],{"class":1203},"PositiveIntegerField",[1053,2610,1154],{"class":1074},[1053,2612,1553],{"class":1222},[1053,2614,1195],{"class":1074},[1053,2616,2617],{"class":1296},"1000",[1053,2619,1312],{"class":1074},[1053,2621,2622,2625,2627,2629,2631,2633,2635,2637,2639,2642,2644,2647,2649,2651,2653,2656,2658,2660],{"class":1055,"line":1618},[1053,2623,2624],{"class":1070},"    api_key ",[1053,2626,1195],{"class":1074},[1053,2628,1198],{"class":1070},[1053,2630,1075],{"class":1074},[1053,2632,1409],{"class":1203},[1053,2634,1154],{"class":1074},[1053,2636,1291],{"class":1222},[1053,2638,1195],{"class":1074},[1053,2640,2641],{"class":1296},"64",[1053,2643,1300],{"class":1074},[1053,2645,2646],{"class":1222}," unique",[1053,2648,1195],{"class":1074},[1053,2650,1309],{"class":1308},[1053,2652,1300],{"class":1074},[1053,2654,2655],{"class":1222}," editable",[1053,2657,1195],{"class":1074},[1053,2659,1582],{"class":1308},[1053,2661,1312],{"class":1074},[1053,2663,2664],{"class":1055,"line":1643},[1053,2665,1186],{"class":1070},[1053,2667,2668,2670,2673,2675,2677,2679,2682,2685,2687,2689,2691],{"class":1055,"line":1648},[1053,2669,1651],{"class":1146},[1053,2671,2672],{"class":1722}," save",[1053,2674,1154],{"class":1074},[1053,2676,1661],{"class":1660},[1053,2678,1300],{"class":1074},[1053,2680,2681],{"class":1752}," *",[1053,2683,2684],{"class":2050},"args",[1053,2686,1300],{"class":1074},[1053,2688,2066],{"class":1752},[1053,2690,2069],{"class":2050},[1053,2692,1166],{"class":1074},[1053,2694,2695,2697,2700,2702,2704,2707],{"class":1055,"line":1666},[1053,2696,1796],{"class":1066},[1053,2698,2699],{"class":1752}," not",[1053,2701,1737],{"class":1682},[1053,2703,1075],{"class":1074},[1053,2705,2706],{"class":1687},"api_key",[1053,2708,1806],{"class":1074},[1053,2710,2711,2714],{"class":1055,"line":1702},[1053,2712,2713],{"class":1066},"            import",[1053,2715,2716],{"class":1070}," secrets\n",[1053,2718,2719,2722,2724,2726,2729,2732,2734,2737,2739,2742],{"class":1055,"line":1707},[1053,2720,2721],{"class":1682},"            self",[1053,2723,1075],{"class":1074},[1053,2725,2706],{"class":1687},[1053,2727,2728],{"class":1074}," =",[1053,2730,2731],{"class":1070}," secrets",[1053,2733,1075],{"class":1074},[1053,2735,2736],{"class":1203},"token_hex",[1053,2738,1154],{"class":1074},[1053,2740,2741],{"class":1296},"32",[1053,2743,1312],{"class":1074},[1053,2745,2746,2749,2751,2753,2755,2758,2760,2762,2764,2766],{"class":1055,"line":1717},[1053,2747,2748],{"class":1713},"        super",[1053,2750,1843],{"class":1074},[1053,2752,2196],{"class":1203},[1053,2754,1154],{"class":1074},[1053,2756,2757],{"class":1752},"*",[1053,2759,2684],{"class":1203},[1053,2761,1300],{"class":1074},[1053,2763,2066],{"class":1752},[1053,2765,2069],{"class":1203},[1053,2767,1312],{"class":1074},[1053,2769,2770],{"class":1055,"line":1732},[1053,2771,1140],{"emptyLinePlaceholder":1139},[1053,2773,2774,2776,2779,2781,2783,2785,2787],{"class":1055,"line":1767},[1053,2775,1147],{"class":1146},[1053,2777,2778],{"class":1150}," Employee",[1053,2780,1154],{"class":1074},[1053,2782,1158],{"class":1157},[1053,2784,1075],{"class":1074},[1053,2786,1163],{"class":1157},[1053,2788,1166],{"class":1074},[1053,2790,2791,2793,2795,2797,2799,2802,2804,2807,2809,2812,2814,2816,2818,2820],{"class":1055,"line":1772},[1053,2792,2380],{"class":1070},[1053,2794,1195],{"class":1074},[1053,2796,1198],{"class":1070},[1053,2798,1075],{"class":1074},[1053,2800,2801],{"class":1203},"ForeignKey",[1053,2803,1154],{"class":1074},[1053,2805,2806],{"class":1203},"Company",[1053,2808,1300],{"class":1074},[1053,2810,2811],{"class":1222}," on_delete",[1053,2813,1195],{"class":1074},[1053,2815,1158],{"class":1203},[1053,2817,1075],{"class":1074},[1053,2819,1233],{"class":1232},[1053,2821,1312],{"class":1074},[1053,2823,2824,2827,2829,2831,2833,2835,2837,2839,2841,2843],{"class":1055,"line":1779},[1053,2825,2826],{"class":1070},"    first_name ",[1053,2828,1195],{"class":1074},[1053,2830,1198],{"class":1070},[1053,2832,1075],{"class":1074},[1053,2834,1409],{"class":1203},[1053,2836,1154],{"class":1074},[1053,2838,1291],{"class":1222},[1053,2840,1195],{"class":1074},[1053,2842,1488],{"class":1296},[1053,2844,1312],{"class":1074},[1053,2846,2847,2850,2852,2854,2856,2858,2860,2862,2864,2866],{"class":1055,"line":1793},[1053,2848,2849],{"class":1070},"    last_name ",[1053,2851,1195],{"class":1074},[1053,2853,1198],{"class":1070},[1053,2855,1075],{"class":1074},[1053,2857,1409],{"class":1203},[1053,2859,1154],{"class":1074},[1053,2861,1291],{"class":1222},[1053,2863,1195],{"class":1074},[1053,2865,1488],{"class":1296},[1053,2867,1312],{"class":1074},[1053,2869,2870,2873,2875,2877,2879,2882,2884,2887,2889,2891],{"class":1055,"line":1809},[1053,2871,2872],{"class":1070},"    email ",[1053,2874,1195],{"class":1074},[1053,2876,1198],{"class":1070},[1053,2878,1075],{"class":1074},[1053,2880,2881],{"class":1203},"EmailField",[1053,2883,1154],{"class":1074},[1053,2885,2886],{"class":1222},"unique",[1053,2888,1195],{"class":1074},[1053,2890,1309],{"class":1308},[1053,2892,1312],{"class":1074},[1053,2894,2895],{"class":1055,"line":1827},[1053,2896,1186],{"class":1070},[1053,2898,2899,2901,2903,2905,2907],{"class":1055,"line":1852},[1053,2900,1651],{"class":1146},[1053,2902,1655],{"class":1654},[1053,2904,1154],{"class":1074},[1053,2906,1661],{"class":1660},[1053,2908,1166],{"class":1074},[1053,2910,2911,2913,2915,2917,2919,2921,2923,2926,2928,2931,2933,2935,2938,2940],{"class":1055,"line":1884},[1053,2912,1669],{"class":1066},[1053,2914,1672],{"class":1146},[1053,2916,1675],{"class":1250},[1053,2918,1679],{"class":1678},[1053,2920,1661],{"class":1682},[1053,2922,1075],{"class":1074},[1053,2924,2925],{"class":1687},"first_name",[1053,2927,1696],{"class":1678},[1053,2929,2930],{"class":1678}," {",[1053,2932,1661],{"class":1682},[1053,2934,1075],{"class":1074},[1053,2936,2937],{"class":1687},"last_name",[1053,2939,1696],{"class":1678},[1053,2941,2942],{"class":1250},"\"\n",[1053,2944,2945],{"class":1055,"line":1940},[1053,2946,1140],{"emptyLinePlaceholder":1139},[1053,2948,2949,2951,2954,2956,2958,2960,2962],{"class":1055,"line":1946},[1053,2950,1147],{"class":1146},[1053,2952,2953],{"class":1150}," EmployeeDetails",[1053,2955,1154],{"class":1074},[1053,2957,1158],{"class":1157},[1053,2959,1075],{"class":1074},[1053,2961,1163],{"class":1157},[1053,2963,1166],{"class":1074},[1053,2965,2966,2968,2971],{"class":1055,"line":1954},[1053,2967,1173],{"class":1172},[1053,2969,2970],{"class":1176},"Extended employee information",[1053,2972,1180],{"class":1172},[1053,2974,2975],{"class":1055,"line":1959},[1053,2976,1186],{"class":1070},[1053,2978,2979,2982,2984,2986,2988,2990],{"class":1055,"line":1965},[1053,2980,2981],{"class":1070},"    employee ",[1053,2983,1195],{"class":1074},[1053,2985,1198],{"class":1070},[1053,2987,1075],{"class":1074},[1053,2989,1204],{"class":1203},[1053,2991,1207],{"class":1074},[1053,2993,2994,2997],{"class":1055,"line":1991},[1053,2995,2996],{"class":1203},"        Employee",[1053,2998,1216],{"class":1074},[1053,3000,3001,3003,3005,3007,3009,3011],{"class":1055,"line":2008},[1053,3002,1223],{"class":1222},[1053,3004,1195],{"class":1074},[1053,3006,1158],{"class":1203},[1053,3008,1075],{"class":1074},[1053,3010,1233],{"class":1232},[1053,3012,1216],{"class":1074},[1053,3014,3015,3017,3019,3021,3024],{"class":1055,"line":2013},[1053,3016,1241],{"class":1222},[1053,3018,1195],{"class":1074},[1053,3020,1247],{"class":1246},[1053,3022,3023],{"class":1250},"details",[1053,3025,1254],{"class":1246},[1053,3027,3028],{"class":1055,"line":2039},[1053,3029,1260],{"class":1074},[1053,3031,3032],{"class":1055,"line":2074},[1053,3033,1186],{"class":1070},[1053,3035,3036],{"class":1055,"line":2084},[1053,3037,3038],{"class":1059},"    # Personal details\n",[1053,3040,3041,3044,3046,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068],{"class":1055,"line":2111},[1053,3042,3043],{"class":1070},"    employee_id ",[1053,3045,1195],{"class":1074},[1053,3047,1198],{"class":1070},[1053,3049,1075],{"class":1074},[1053,3051,1409],{"class":1203},[1053,3053,1154],{"class":1074},[1053,3055,1291],{"class":1222},[1053,3057,1195],{"class":1074},[1053,3059,1418],{"class":1296},[1053,3061,1300],{"class":1074},[1053,3063,2646],{"class":1222},[1053,3065,1195],{"class":1074},[1053,3067,1309],{"class":1308},[1053,3069,1312],{"class":1074},[1053,3071,3072,3075,3077,3079,3081,3083],{"class":1055,"line":2116},[1053,3073,3074],{"class":1070},"    hire_date ",[1053,3076,1195],{"class":1074},[1053,3078,1198],{"class":1070},[1053,3080,1075],{"class":1074},[1053,3082,1327],{"class":1203},[1053,3084,1849],{"class":1074},[1053,3086,3087,3090,3092,3094,3096,3098,3100,3102,3104,3107],{"class":1055,"line":2137},[1053,3088,3089],{"class":1070},"    department ",[1053,3091,1195],{"class":1074},[1053,3093,1198],{"class":1070},[1053,3095,1075],{"class":1074},[1053,3097,1409],{"class":1203},[1053,3099,1154],{"class":1074},[1053,3101,1291],{"class":1222},[1053,3103,1195],{"class":1074},[1053,3105,3106],{"class":1296},"100",[1053,3108,1312],{"class":1074},[1053,3110,3111,3114,3116,3118,3120,3122,3124,3126,3128,3130],{"class":1055,"line":2161},[1053,3112,3113],{"class":1070},"    position ",[1053,3115,1195],{"class":1074},[1053,3117,1198],{"class":1070},[1053,3119,1075],{"class":1074},[1053,3121,1409],{"class":1203},[1053,3123,1154],{"class":1074},[1053,3125,1291],{"class":1222},[1053,3127,1195],{"class":1074},[1053,3129,3106],{"class":1296},[1053,3131,1312],{"class":1074},[1053,3133,3134,3137,3139,3141,3143,3146,3148,3151,3153,3156,3158,3161,3163,3166],{"class":1055,"line":2184},[1053,3135,3136],{"class":1070},"    salary ",[1053,3138,1195],{"class":1074},[1053,3140,1198],{"class":1070},[1053,3142,1075],{"class":1074},[1053,3144,3145],{"class":1203},"DecimalField",[1053,3147,1154],{"class":1074},[1053,3149,3150],{"class":1222},"max_digits",[1053,3152,1195],{"class":1074},[1053,3154,3155],{"class":1296},"10",[1053,3157,1300],{"class":1074},[1053,3159,3160],{"class":1222}," decimal_places",[1053,3162,1195],{"class":1074},[1053,3164,3165],{"class":1296},"2",[1053,3167,1312],{"class":1074},[1053,3169,3170],{"class":1055,"line":2201},[1053,3171,1186],{"class":1070},[1053,3173,3174],{"class":1055,"line":2206},[1053,3175,3176],{"class":1059},"    # Emergency contact\n",[1053,3178,3179,3182,3184,3186,3188,3190,3192,3194,3196,3198],{"class":1055,"line":2212},[1053,3180,3181],{"class":1070},"    emergency_contact_name ",[1053,3183,1195],{"class":1074},[1053,3185,1198],{"class":1070},[1053,3187,1075],{"class":1074},[1053,3189,1409],{"class":1203},[1053,3191,1154],{"class":1074},[1053,3193,1291],{"class":1222},[1053,3195,1195],{"class":1074},[1053,3197,3106],{"class":1296},[1053,3199,1312],{"class":1074},[1053,3201,3202,3205,3207,3209,3211,3213,3215,3217,3219,3221],{"class":1055,"line":2218},[1053,3203,3204],{"class":1070},"    emergency_contact_phone ",[1053,3206,1195],{"class":1074},[1053,3208,1198],{"class":1070},[1053,3210,1075],{"class":1074},[1053,3212,1409],{"class":1203},[1053,3214,1154],{"class":1074},[1053,3216,1291],{"class":1222},[1053,3218,1195],{"class":1074},[1053,3220,1418],{"class":1296},[1053,3222,1312],{"class":1074},[1053,3224,3225],{"class":1055,"line":2224},[1053,3226,1186],{"class":1070},[1053,3228,3230],{"class":1055,"line":3229},68,[1053,3231,3232],{"class":1059},"    # Benefits\n",[1053,3234,3236,3239,3241,3243,3245,3247,3249,3251,3253,3255],{"class":1055,"line":3235},69,[1053,3237,3238],{"class":1070},"    health_insurance ",[1053,3240,1195],{"class":1074},[1053,3242,1198],{"class":1070},[1053,3244,1075],{"class":1074},[1053,3246,1548],{"class":1203},[1053,3248,1154],{"class":1074},[1053,3250,1553],{"class":1222},[1053,3252,1195],{"class":1074},[1053,3254,1309],{"class":1308},[1053,3256,1312],{"class":1074},[1053,3258,3260,3263,3265,3267,3269,3271,3273,3275,3277,3279],{"class":1055,"line":3259},70,[1053,3261,3262],{"class":1070},"    dental_insurance ",[1053,3264,1195],{"class":1074},[1053,3266,1198],{"class":1070},[1053,3268,1075],{"class":1074},[1053,3270,1548],{"class":1203},[1053,3272,1154],{"class":1074},[1053,3274,1553],{"class":1222},[1053,3276,1195],{"class":1074},[1053,3278,1582],{"class":1308},[1053,3280,1312],{"class":1074},[1053,3282,3284,3287,3289,3291,3293,3295,3297,3299,3301,3303],{"class":1055,"line":3283},71,[1053,3285,3286],{"class":1070},"    retirement_plan ",[1053,3288,1195],{"class":1074},[1053,3290,1198],{"class":1070},[1053,3292,1075],{"class":1074},[1053,3294,1548],{"class":1203},[1053,3296,1154],{"class":1074},[1053,3298,1553],{"class":1222},[1053,3300,1195],{"class":1074},[1053,3302,1309],{"class":1308},[1053,3304,1312],{"class":1074},[1053,3306,3308],{"class":1055,"line":3307},72,[1053,3309,1186],{"class":1070},[1053,3311,3313,3315,3317,3319,3321],{"class":1055,"line":3312},73,[1053,3314,1651],{"class":1146},[1053,3316,1655],{"class":1654},[1053,3318,1154],{"class":1074},[1053,3320,1661],{"class":1660},[1053,3322,1166],{"class":1074},[1053,3324,3326,3328,3330,3333,3335,3337,3339,3342,3344],{"class":1055,"line":3325},74,[1053,3327,1669],{"class":1066},[1053,3329,1672],{"class":1146},[1053,3331,3332],{"class":1250},"\"Details for ",[1053,3334,1679],{"class":1678},[1053,3336,1661],{"class":1682},[1053,3338,1075],{"class":1074},[1053,3340,3341],{"class":1687},"employee",[1053,3343,1696],{"class":1678},[1053,3345,2942],{"class":1250},[1030,3347,3349],{"id":3348},"one-to-many-relationships-foreign-keys","One-to-Many Relationships (Foreign Keys)",[1026,3351,3352],{},"One-to-many relationships are the most common type of relationship, where one record can be related to multiple records in another table.",[1038,3354,3356],{"id":3355},"basic-foreign-key-implementation","Basic Foreign Key Implementation",[1043,3358,3360],{"className":1045,"code":3359,"language":1047,"meta":1048,"style":1048},"# models.py\nfrom django.db import models\nfrom django.contrib.auth.models import User\n\nclass Category(models.Model):\n    name = models.CharField(max_length=100, unique=True)\n    slug = models.SlugField(max_length=100, unique=True)\n    description = models.TextField(blank=True)\n    parent = models.ForeignKey(\n        'self',  # Self-referential foreign key\n        on_delete=models.CASCADE,\n        null=True,\n        blank=True,\n        related_name='subcategories'\n    )\n    \n    class Meta:\n        verbose_name_plural = 'Categories'\n        ordering = ['name']\n    \n    def __str__(self):\n        return self.name\n    \n    @property\n    def is_root_category(self):\n        return self.parent is None\n    \n    def get_ancestors(self):\n        \"\"\"Get all parent categories\"\"\"\n        ancestors = []\n        current = self.parent\n        while current:\n            ancestors.append(current)\n            current = current.parent\n        return ancestors\n    \n    def get_descendants(self):\n        \"\"\"Get all child categories recursively\"\"\"\n        descendants = []\n        for child in self.subcategories.all():\n            descendants.append(child)\n            descendants.extend(child.get_descendants())\n        return descendants\n\nclass Post(models.Model):\n    STATUS_CHOICES = [\n        ('draft', 'Draft'),\n        ('published', 'Published'),\n        ('archived', 'Archived'),\n    ]\n    \n    title = models.CharField(max_length=200)\n    slug = models.SlugField(max_length=200, unique=True)\n    \n    # Foreign key to User model\n    author = models.ForeignKey(\n        User,\n        on_delete=models.CASCADE,\n        related_name='posts'  # Allows user.posts.all()\n    )\n    \n    # Foreign key to Category model\n    category = models.ForeignKey(\n        Category,\n        on_delete=models.SET_NULL,  # Keep posts if category is deleted\n        null=True,\n        blank=True,\n        related_name='posts'\n    )\n    \n    content = models.TextField()\n    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')\n    \n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n    published_at = models.DateTimeField(null=True, blank=True)\n    \n    class Meta:\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['status', 'published_at']),\n            models.Index(fields=['author', 'status']),\n            models.Index(fields=['category', 'status']),\n        ]\n    \n    def __str__(self):\n        return self.title\n\nclass Comment(models.Model):\n    # Foreign key to Post\n    post = models.ForeignKey(\n        Post,\n        on_delete=models.CASCADE,\n        related_name='comments'\n    )\n    \n    # Foreign key to User\n    author = models.ForeignKey(\n        User,\n        on_delete=models.CASCADE,\n        related_name='comments'\n    )\n    \n    # Self-referential foreign key for nested comments\n    parent = models.ForeignKey(\n        'self',\n        on_delete=models.CASCADE,\n        null=True,\n        blank=True,\n        related_name='replies'\n    )\n    \n    content = models.TextField()\n    is_approved = models.BooleanField(default=False)\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        ordering = ['created_at']\n    \n    def __str__(self):\n        return f'Comment by {self.author.username} on {self.post.title}'\n    \n    @property\n    def is_reply(self):\n        return self.parent is not None\n    \n    def get_replies(self):\n        \"\"\"Get all replies to this comment\"\"\"\n        return self.replies.filter(is_approved=True)\n\n# Usage examples:\n# Get all posts by an author\n# author_posts = user.posts.all()\n\n# Get all posts in a category\n# category_posts = category.posts.filter(status='published')\n\n# Get all comments for a post\n# post_comments = post.comments.filter(is_approved=True)\n\n# Get all replies to a comment\n# comment_replies = comment.replies.all()\n",[1050,3361,3362,3366,3380,3402,3406,3423,3453,3485,3508,3523,3537,3551,3562,3573,3586,3590,3594,3604,3618,3638,3642,3654,3664,3668,3674,3687,3703,3707,3720,3730,3740,3754,3764,3781,3794,3801,3805,3818,3827,3836,3861,3877,3898,3905,3909,3926,3936,3960,3982,4004,4009,4013,4036,4066,4070,4075,4090,4096,4110,4126,4130,4134,4139,4154,4161,4179,4189,4199,4211,4215,4219,4234,4280,4284,4306,4329,4361,4366,4375,4393,4403,4441,4473,4505,4511,4516,4529,4541,4546,4564,4570,4586,4594,4609,4623,4628,4633,4639,4654,4661,4676,4689,4694,4699,4705,4720,4731,4746,4757,4768,4782,4787,4792,4807,4831,4854,4859,4868,4886,4891,4904,4949,4954,4961,4975,4992,4997,5011,5021,5048,5053,5058,5064,5070,5075,5081,5087,5092,5098,5104,5109,5115],{"__ignoreMap":1048},[1053,3363,3364],{"class":1055,"line":1056},[1053,3365,1060],{"class":1059},[1053,3367,3368,3370,3372,3374,3376,3378],{"class":1055,"line":1063},[1053,3369,1067],{"class":1066},[1053,3371,1071],{"class":1070},[1053,3373,1075],{"class":1074},[1053,3375,1078],{"class":1070},[1053,3377,1081],{"class":1066},[1053,3379,1084],{"class":1070},[1053,3381,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400],{"class":1055,"line":1087},[1053,3383,1067],{"class":1066},[1053,3385,1071],{"class":1070},[1053,3387,1075],{"class":1074},[1053,3389,1096],{"class":1070},[1053,3391,1075],{"class":1074},[1053,3393,1101],{"class":1070},[1053,3395,1075],{"class":1074},[1053,3397,1106],{"class":1070},[1053,3399,1081],{"class":1066},[1053,3401,1111],{"class":1070},[1053,3403,3404],{"class":1055,"line":1114},[1053,3405,1140],{"emptyLinePlaceholder":1139},[1053,3407,3408,3410,3413,3415,3417,3419,3421],{"class":1055,"line":1136},[1053,3409,1147],{"class":1146},[1053,3411,3412],{"class":1150}," Category",[1053,3414,1154],{"class":1074},[1053,3416,1158],{"class":1157},[1053,3418,1075],{"class":1074},[1053,3420,1163],{"class":1157},[1053,3422,1166],{"class":1074},[1053,3424,3425,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447,3449,3451],{"class":1055,"line":1143},[1053,3426,2280],{"class":1070},[1053,3428,1195],{"class":1074},[1053,3430,1198],{"class":1070},[1053,3432,1075],{"class":1074},[1053,3434,1409],{"class":1203},[1053,3436,1154],{"class":1074},[1053,3438,1291],{"class":1222},[1053,3440,1195],{"class":1074},[1053,3442,3106],{"class":1296},[1053,3444,1300],{"class":1074},[1053,3446,2646],{"class":1222},[1053,3448,1195],{"class":1074},[1053,3450,1309],{"class":1308},[1053,3452,1312],{"class":1074},[1053,3454,3455,3458,3460,3462,3464,3467,3469,3471,3473,3475,3477,3479,3481,3483],{"class":1055,"line":1169},[1053,3456,3457],{"class":1070},"    slug ",[1053,3459,1195],{"class":1074},[1053,3461,1198],{"class":1070},[1053,3463,1075],{"class":1074},[1053,3465,3466],{"class":1203},"SlugField",[1053,3468,1154],{"class":1074},[1053,3470,1291],{"class":1222},[1053,3472,1195],{"class":1074},[1053,3474,3106],{"class":1296},[1053,3476,1300],{"class":1074},[1053,3478,2646],{"class":1222},[1053,3480,1195],{"class":1074},[1053,3482,1309],{"class":1308},[1053,3484,1312],{"class":1074},[1053,3486,3487,3490,3492,3494,3496,3498,3500,3502,3504,3506],{"class":1055,"line":1183},[1053,3488,3489],{"class":1070},"    description ",[1053,3491,1195],{"class":1074},[1053,3493,1198],{"class":1070},[1053,3495,1075],{"class":1074},[1053,3497,1286],{"class":1203},[1053,3499,1154],{"class":1074},[1053,3501,1448],{"class":1222},[1053,3503,1195],{"class":1074},[1053,3505,1309],{"class":1308},[1053,3507,1312],{"class":1074},[1053,3509,3510,3513,3515,3517,3519,3521],{"class":1055,"line":1189},[1053,3511,3512],{"class":1070},"    parent ",[1053,3514,1195],{"class":1074},[1053,3516,1198],{"class":1070},[1053,3518,1075],{"class":1074},[1053,3520,2801],{"class":1203},[1053,3522,1207],{"class":1074},[1053,3524,3525,3528,3530,3532,3534],{"class":1055,"line":1210},[1053,3526,3527],{"class":1246},"        '",[1053,3529,1661],{"class":1250},[1053,3531,1247],{"class":1246},[1053,3533,1300],{"class":1074},[1053,3535,3536],{"class":1059},"  # Self-referential foreign key\n",[1053,3538,3539,3541,3543,3545,3547,3549],{"class":1055,"line":1219},[1053,3540,1223],{"class":1222},[1053,3542,1195],{"class":1074},[1053,3544,1158],{"class":1203},[1053,3546,1075],{"class":1074},[1053,3548,1233],{"class":1232},[1053,3550,1216],{"class":1074},[1053,3552,3553,3556,3558,3560],{"class":1055,"line":1238},[1053,3554,3555],{"class":1222},"        null",[1053,3557,1195],{"class":1074},[1053,3559,1309],{"class":1308},[1053,3561,1216],{"class":1074},[1053,3563,3564,3567,3569,3571],{"class":1055,"line":1257},[1053,3565,3566],{"class":1222},"        blank",[1053,3568,1195],{"class":1074},[1053,3570,1309],{"class":1308},[1053,3572,1216],{"class":1074},[1053,3574,3575,3577,3579,3581,3584],{"class":1055,"line":1263},[1053,3576,1241],{"class":1222},[1053,3578,1195],{"class":1074},[1053,3580,1247],{"class":1246},[1053,3582,3583],{"class":1250},"subcategories",[1053,3585,1254],{"class":1246},[1053,3587,3588],{"class":1055,"line":1268},[1053,3589,1260],{"class":1074},[1053,3591,3592],{"class":1055,"line":1274},[1053,3593,1186],{"class":1070},[1053,3595,3596,3599,3602],{"class":1055,"line":1315},[1053,3597,3598],{"class":1146},"    class",[1053,3600,3601],{"class":1150}," Meta",[1053,3603,1806],{"class":1074},[1053,3605,3606,3609,3611,3613,3616],{"class":1055,"line":1349},[1053,3607,3608],{"class":1070},"        verbose_name_plural ",[1053,3610,1195],{"class":1074},[1053,3612,2175],{"class":1246},[1053,3614,3615],{"class":1250},"Categories",[1053,3617,1254],{"class":1246},[1053,3619,3620,3623,3625,3628,3630,3633,3635],{"class":1055,"line":1397},[1053,3621,3622],{"class":1070},"        ordering ",[1053,3624,1195],{"class":1074},[1053,3626,3627],{"class":1074}," [",[1053,3629,1247],{"class":1246},[1053,3631,3632],{"class":1250},"name",[1053,3634,1247],{"class":1246},[1053,3636,3637],{"class":1074},"]\n",[1053,3639,3640],{"class":1055,"line":1431},[1053,3641,1186],{"class":1070},[1053,3643,3644,3646,3648,3650,3652],{"class":1055,"line":1457},[1053,3645,1651],{"class":1146},[1053,3647,1655],{"class":1654},[1053,3649,1154],{"class":1074},[1053,3651,1661],{"class":1660},[1053,3653,1166],{"class":1074},[1053,3655,3656,3658,3660,3662],{"class":1055,"line":1462},[1053,3657,1669],{"class":1066},[1053,3659,1737],{"class":1682},[1053,3661,1075],{"class":1074},[1053,3663,2341],{"class":1687},[1053,3665,3666],{"class":1055,"line":1468},[1053,3667,1186],{"class":1070},[1053,3669,3670,3672],{"class":1055,"line":1501},[1053,3671,1710],{"class":1074},[1053,3673,1714],{"class":1713},[1053,3675,3676,3678,3681,3683,3685],{"class":1055,"line":1525},[1053,3677,1651],{"class":1146},[1053,3679,3680],{"class":1722}," is_root_category",[1053,3682,1154],{"class":1074},[1053,3684,1661],{"class":1660},[1053,3686,1166],{"class":1074},[1053,3688,3689,3691,3693,3695,3698,3701],{"class":1055,"line":1530},[1053,3690,1669],{"class":1066},[1053,3692,1737],{"class":1682},[1053,3694,1075],{"class":1074},[1053,3696,3697],{"class":1687},"parent",[1053,3699,3700],{"class":1752}," is",[1053,3702,1951],{"class":1308},[1053,3704,3705],{"class":1055,"line":1536},[1053,3706,1186],{"class":1070},[1053,3708,3709,3711,3714,3716,3718],{"class":1055,"line":1562},[1053,3710,1651],{"class":1146},[1053,3712,3713],{"class":1722}," get_ancestors",[1053,3715,1154],{"class":1074},[1053,3717,1661],{"class":1660},[1053,3719,1166],{"class":1074},[1053,3721,3722,3725,3728],{"class":1055,"line":1587},[1053,3723,3724],{"class":1172},"        \"\"\"",[1053,3726,3727],{"class":1176},"Get all parent categories",[1053,3729,1180],{"class":1172},[1053,3731,3732,3735,3737],{"class":1055,"line":1592},[1053,3733,3734],{"class":1070},"        ancestors ",[1053,3736,1195],{"class":1074},[1053,3738,3739],{"class":1074}," []\n",[1053,3741,3742,3745,3747,3749,3751],{"class":1055,"line":1618},[1053,3743,3744],{"class":1070},"        current ",[1053,3746,1195],{"class":1074},[1053,3748,1737],{"class":1682},[1053,3750,1075],{"class":1074},[1053,3752,3753],{"class":1687},"parent\n",[1053,3755,3756,3759,3762],{"class":1055,"line":1643},[1053,3757,3758],{"class":1066},"        while",[1053,3760,3761],{"class":1070}," current",[1053,3763,1806],{"class":1074},[1053,3765,3766,3769,3771,3774,3776,3779],{"class":1055,"line":1648},[1053,3767,3768],{"class":1070},"            ancestors",[1053,3770,1075],{"class":1074},[1053,3772,3773],{"class":1203},"append",[1053,3775,1154],{"class":1074},[1053,3777,3778],{"class":1203},"current",[1053,3780,1312],{"class":1074},[1053,3782,3783,3786,3788,3790,3792],{"class":1055,"line":1666},[1053,3784,3785],{"class":1070},"            current ",[1053,3787,1195],{"class":1074},[1053,3789,3761],{"class":1070},[1053,3791,1075],{"class":1074},[1053,3793,3753],{"class":1687},[1053,3795,3796,3798],{"class":1055,"line":1702},[1053,3797,1669],{"class":1066},[1053,3799,3800],{"class":1070}," ancestors\n",[1053,3802,3803],{"class":1055,"line":1707},[1053,3804,1186],{"class":1070},[1053,3806,3807,3809,3812,3814,3816],{"class":1055,"line":1717},[1053,3808,1651],{"class":1146},[1053,3810,3811],{"class":1722}," get_descendants",[1053,3813,1154],{"class":1074},[1053,3815,1661],{"class":1660},[1053,3817,1166],{"class":1074},[1053,3819,3820,3822,3825],{"class":1055,"line":1732},[1053,3821,3724],{"class":1172},[1053,3823,3824],{"class":1176},"Get all child categories recursively",[1053,3826,1180],{"class":1172},[1053,3828,3829,3832,3834],{"class":1055,"line":1767},[1053,3830,3831],{"class":1070},"        descendants ",[1053,3833,1195],{"class":1074},[1053,3835,3739],{"class":1074},[1053,3837,3838,3841,3844,3847,3849,3851,3853,3855,3858],{"class":1055,"line":1772},[1053,3839,3840],{"class":1066},"        for",[1053,3842,3843],{"class":1070}," child ",[1053,3845,3846],{"class":1066},"in",[1053,3848,1737],{"class":1682},[1053,3850,1075],{"class":1074},[1053,3852,3583],{"class":1687},[1053,3854,1075],{"class":1074},[1053,3856,3857],{"class":1203},"all",[1053,3859,3860],{"class":1074},"():\n",[1053,3862,3863,3866,3868,3870,3872,3875],{"class":1055,"line":1779},[1053,3864,3865],{"class":1070},"            descendants",[1053,3867,1075],{"class":1074},[1053,3869,3773],{"class":1203},[1053,3871,1154],{"class":1074},[1053,3873,3874],{"class":1203},"child",[1053,3876,1312],{"class":1074},[1053,3878,3879,3881,3883,3886,3888,3890,3892,3895],{"class":1055,"line":1793},[1053,3880,3865],{"class":1070},[1053,3882,1075],{"class":1074},[1053,3884,3885],{"class":1203},"extend",[1053,3887,1154],{"class":1074},[1053,3889,3874],{"class":1203},[1053,3891,1075],{"class":1074},[1053,3893,3894],{"class":1203},"get_descendants",[1053,3896,3897],{"class":1074},"())\n",[1053,3899,3900,3902],{"class":1055,"line":1809},[1053,3901,1669],{"class":1066},[1053,3903,3904],{"class":1070}," descendants\n",[1053,3906,3907],{"class":1055,"line":1827},[1053,3908,1140],{"emptyLinePlaceholder":1139},[1053,3910,3911,3913,3916,3918,3920,3922,3924],{"class":1055,"line":1852},[1053,3912,1147],{"class":1146},[1053,3914,3915],{"class":1150}," Post",[1053,3917,1154],{"class":1074},[1053,3919,1158],{"class":1157},[1053,3921,1075],{"class":1074},[1053,3923,1163],{"class":1157},[1053,3925,1166],{"class":1074},[1053,3927,3928,3931,3933],{"class":1055,"line":1884},[1053,3929,3930],{"class":1682},"    STATUS_CHOICES",[1053,3932,2728],{"class":1074},[1053,3934,3935],{"class":1074}," [\n",[1053,3937,3938,3941,3943,3946,3948,3950,3952,3955,3957],{"class":1055,"line":1940},[1053,3939,3940],{"class":1074},"        (",[1053,3942,1247],{"class":1246},[1053,3944,3945],{"class":1250},"draft",[1053,3947,1247],{"class":1246},[1053,3949,1300],{"class":1074},[1053,3951,2175],{"class":1246},[1053,3953,3954],{"class":1250},"Draft",[1053,3956,1247],{"class":1246},[1053,3958,3959],{"class":1074},"),\n",[1053,3961,3962,3964,3966,3969,3971,3973,3975,3978,3980],{"class":1055,"line":1946},[1053,3963,3940],{"class":1074},[1053,3965,1247],{"class":1246},[1053,3967,3968],{"class":1250},"published",[1053,3970,1247],{"class":1246},[1053,3972,1300],{"class":1074},[1053,3974,2175],{"class":1246},[1053,3976,3977],{"class":1250},"Published",[1053,3979,1247],{"class":1246},[1053,3981,3959],{"class":1074},[1053,3983,3984,3986,3988,3991,3993,3995,3997,4000,4002],{"class":1055,"line":1954},[1053,3985,3940],{"class":1074},[1053,3987,1247],{"class":1246},[1053,3989,3990],{"class":1250},"archived",[1053,3992,1247],{"class":1246},[1053,3994,1300],{"class":1074},[1053,3996,2175],{"class":1246},[1053,3998,3999],{"class":1250},"Archived",[1053,4001,1247],{"class":1246},[1053,4003,3959],{"class":1074},[1053,4005,4006],{"class":1055,"line":1959},[1053,4007,4008],{"class":1074},"    ]\n",[1053,4010,4011],{"class":1055,"line":1965},[1053,4012,1186],{"class":1070},[1053,4014,4015,4018,4020,4022,4024,4026,4028,4030,4032,4034],{"class":1055,"line":1991},[1053,4016,4017],{"class":1070},"    title ",[1053,4019,1195],{"class":1074},[1053,4021,1198],{"class":1070},[1053,4023,1075],{"class":1074},[1053,4025,1409],{"class":1203},[1053,4027,1154],{"class":1074},[1053,4029,1291],{"class":1222},[1053,4031,1195],{"class":1074},[1053,4033,2297],{"class":1296},[1053,4035,1312],{"class":1074},[1053,4037,4038,4040,4042,4044,4046,4048,4050,4052,4054,4056,4058,4060,4062,4064],{"class":1055,"line":2008},[1053,4039,3457],{"class":1070},[1053,4041,1195],{"class":1074},[1053,4043,1198],{"class":1070},[1053,4045,1075],{"class":1074},[1053,4047,3466],{"class":1203},[1053,4049,1154],{"class":1074},[1053,4051,1291],{"class":1222},[1053,4053,1195],{"class":1074},[1053,4055,2297],{"class":1296},[1053,4057,1300],{"class":1074},[1053,4059,2646],{"class":1222},[1053,4061,1195],{"class":1074},[1053,4063,1309],{"class":1308},[1053,4065,1312],{"class":1074},[1053,4067,4068],{"class":1055,"line":2013},[1053,4069,1186],{"class":1070},[1053,4071,4072],{"class":1055,"line":2039},[1053,4073,4074],{"class":1059},"    # Foreign key to User model\n",[1053,4076,4077,4080,4082,4084,4086,4088],{"class":1055,"line":2074},[1053,4078,4079],{"class":1070},"    author ",[1053,4081,1195],{"class":1074},[1053,4083,1198],{"class":1070},[1053,4085,1075],{"class":1074},[1053,4087,2801],{"class":1203},[1053,4089,1207],{"class":1074},[1053,4091,4092,4094],{"class":1055,"line":2084},[1053,4093,1213],{"class":1203},[1053,4095,1216],{"class":1074},[1053,4097,4098,4100,4102,4104,4106,4108],{"class":1055,"line":2111},[1053,4099,1223],{"class":1222},[1053,4101,1195],{"class":1074},[1053,4103,1158],{"class":1203},[1053,4105,1075],{"class":1074},[1053,4107,1233],{"class":1232},[1053,4109,1216],{"class":1074},[1053,4111,4112,4114,4116,4118,4121,4123],{"class":1055,"line":2116},[1053,4113,1241],{"class":1222},[1053,4115,1195],{"class":1074},[1053,4117,1247],{"class":1246},[1053,4119,4120],{"class":1250},"posts",[1053,4122,1247],{"class":1246},[1053,4124,4125],{"class":1059},"  # Allows user.posts.all()\n",[1053,4127,4128],{"class":1055,"line":2137},[1053,4129,1260],{"class":1074},[1053,4131,4132],{"class":1055,"line":2161},[1053,4133,1186],{"class":1070},[1053,4135,4136],{"class":1055,"line":2184},[1053,4137,4138],{"class":1059},"    # Foreign key to Category model\n",[1053,4140,4141,4144,4146,4148,4150,4152],{"class":1055,"line":2201},[1053,4142,4143],{"class":1070},"    category ",[1053,4145,1195],{"class":1074},[1053,4147,1198],{"class":1070},[1053,4149,1075],{"class":1074},[1053,4151,2801],{"class":1203},[1053,4153,1207],{"class":1074},[1053,4155,4156,4159],{"class":1055,"line":2206},[1053,4157,4158],{"class":1203},"        Category",[1053,4160,1216],{"class":1074},[1053,4162,4163,4165,4167,4169,4171,4174,4176],{"class":1055,"line":2212},[1053,4164,1223],{"class":1222},[1053,4166,1195],{"class":1074},[1053,4168,1158],{"class":1203},[1053,4170,1075],{"class":1074},[1053,4172,4173],{"class":1232},"SET_NULL",[1053,4175,1300],{"class":1074},[1053,4177,4178],{"class":1059},"  # Keep posts if category is deleted\n",[1053,4180,4181,4183,4185,4187],{"class":1055,"line":2218},[1053,4182,3555],{"class":1222},[1053,4184,1195],{"class":1074},[1053,4186,1309],{"class":1308},[1053,4188,1216],{"class":1074},[1053,4190,4191,4193,4195,4197],{"class":1055,"line":2224},[1053,4192,3566],{"class":1222},[1053,4194,1195],{"class":1074},[1053,4196,1309],{"class":1308},[1053,4198,1216],{"class":1074},[1053,4200,4201,4203,4205,4207,4209],{"class":1055,"line":3229},[1053,4202,1241],{"class":1222},[1053,4204,1195],{"class":1074},[1053,4206,1247],{"class":1246},[1053,4208,4120],{"class":1250},[1053,4210,1254],{"class":1246},[1053,4212,4213],{"class":1055,"line":3235},[1053,4214,1260],{"class":1074},[1053,4216,4217],{"class":1055,"line":3259},[1053,4218,1186],{"class":1070},[1053,4220,4221,4224,4226,4228,4230,4232],{"class":1055,"line":3283},[1053,4222,4223],{"class":1070},"    content ",[1053,4225,1195],{"class":1074},[1053,4227,1198],{"class":1070},[1053,4229,1075],{"class":1074},[1053,4231,1286],{"class":1203},[1053,4233,1849],{"class":1074},[1053,4235,4236,4239,4241,4243,4245,4247,4249,4251,4253,4255,4257,4260,4262,4266,4268,4270,4272,4274,4276,4278],{"class":1055,"line":3307},[1053,4237,4238],{"class":1070},"    status ",[1053,4240,1195],{"class":1074},[1053,4242,1198],{"class":1070},[1053,4244,1075],{"class":1074},[1053,4246,1409],{"class":1203},[1053,4248,1154],{"class":1074},[1053,4250,1291],{"class":1222},[1053,4252,1195],{"class":1074},[1053,4254,3155],{"class":1296},[1053,4256,1300],{"class":1074},[1053,4258,4259],{"class":1222}," choices",[1053,4261,1195],{"class":1074},[1053,4263,4265],{"class":4264},"s6DHA","STATUS_CHOICES",[1053,4267,1300],{"class":1074},[1053,4269,2520],{"class":1222},[1053,4271,1195],{"class":1074},[1053,4273,1247],{"class":1246},[1053,4275,3945],{"class":1250},[1053,4277,1247],{"class":1246},[1053,4279,1312],{"class":1074},[1053,4281,4282],{"class":1055,"line":3312},[1053,4283,1186],{"class":1070},[1053,4285,4286,4288,4290,4292,4294,4296,4298,4300,4302,4304],{"class":1055,"line":3325},[1053,4287,1595],{"class":1070},[1053,4289,1195],{"class":1074},[1053,4291,1198],{"class":1070},[1053,4293,1075],{"class":1074},[1053,4295,1604],{"class":1203},[1053,4297,1154],{"class":1074},[1053,4299,1609],{"class":1222},[1053,4301,1195],{"class":1074},[1053,4303,1309],{"class":1308},[1053,4305,1312],{"class":1074},[1053,4307,4309,4311,4313,4315,4317,4319,4321,4323,4325,4327],{"class":1055,"line":4308},75,[1053,4310,1621],{"class":1070},[1053,4312,1195],{"class":1074},[1053,4314,1198],{"class":1070},[1053,4316,1075],{"class":1074},[1053,4318,1604],{"class":1203},[1053,4320,1154],{"class":1074},[1053,4322,1634],{"class":1222},[1053,4324,1195],{"class":1074},[1053,4326,1309],{"class":1308},[1053,4328,1312],{"class":1074},[1053,4330,4332,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359],{"class":1055,"line":4331},76,[1053,4333,4334],{"class":1070},"    published_at ",[1053,4336,1195],{"class":1074},[1053,4338,1198],{"class":1070},[1053,4340,1075],{"class":1074},[1053,4342,1604],{"class":1203},[1053,4344,1154],{"class":1074},[1053,4346,1332],{"class":1222},[1053,4348,1195],{"class":1074},[1053,4350,1309],{"class":1308},[1053,4352,1300],{"class":1074},[1053,4354,1303],{"class":1222},[1053,4356,1195],{"class":1074},[1053,4358,1309],{"class":1308},[1053,4360,1312],{"class":1074},[1053,4362,4364],{"class":1055,"line":4363},77,[1053,4365,1186],{"class":1070},[1053,4367,4369,4371,4373],{"class":1055,"line":4368},78,[1053,4370,3598],{"class":1146},[1053,4372,3601],{"class":1150},[1053,4374,1806],{"class":1074},[1053,4376,4378,4380,4382,4384,4386,4389,4391],{"class":1055,"line":4377},79,[1053,4379,3622],{"class":1070},[1053,4381,1195],{"class":1074},[1053,4383,3627],{"class":1074},[1053,4385,1247],{"class":1246},[1053,4387,4388],{"class":1250},"-created_at",[1053,4390,1247],{"class":1246},[1053,4392,3637],{"class":1074},[1053,4394,4396,4399,4401],{"class":1055,"line":4395},80,[1053,4397,4398],{"class":1070},"        indexes ",[1053,4400,1195],{"class":1074},[1053,4402,3935],{"class":1074},[1053,4404,4406,4409,4411,4414,4416,4419,4422,4424,4427,4429,4431,4433,4436,4438],{"class":1055,"line":4405},81,[1053,4407,4408],{"class":1070},"            models",[1053,4410,1075],{"class":1074},[1053,4412,4413],{"class":1203},"Index",[1053,4415,1154],{"class":1074},[1053,4417,4418],{"class":1222},"fields",[1053,4420,4421],{"class":1074},"=[",[1053,4423,1247],{"class":1246},[1053,4425,4426],{"class":1250},"status",[1053,4428,1247],{"class":1246},[1053,4430,1300],{"class":1074},[1053,4432,2175],{"class":1246},[1053,4434,4435],{"class":1250},"published_at",[1053,4437,1247],{"class":1246},[1053,4439,4440],{"class":1074},"]),\n",[1053,4442,4444,4446,4448,4450,4452,4454,4456,4458,4461,4463,4465,4467,4469,4471],{"class":1055,"line":4443},82,[1053,4445,4408],{"class":1070},[1053,4447,1075],{"class":1074},[1053,4449,4413],{"class":1203},[1053,4451,1154],{"class":1074},[1053,4453,4418],{"class":1222},[1053,4455,4421],{"class":1074},[1053,4457,1247],{"class":1246},[1053,4459,4460],{"class":1250},"author",[1053,4462,1247],{"class":1246},[1053,4464,1300],{"class":1074},[1053,4466,2175],{"class":1246},[1053,4468,4426],{"class":1250},[1053,4470,1247],{"class":1246},[1053,4472,4440],{"class":1074},[1053,4474,4476,4478,4480,4482,4484,4486,4488,4490,4493,4495,4497,4499,4501,4503],{"class":1055,"line":4475},83,[1053,4477,4408],{"class":1070},[1053,4479,1075],{"class":1074},[1053,4481,4413],{"class":1203},[1053,4483,1154],{"class":1074},[1053,4485,4418],{"class":1222},[1053,4487,4421],{"class":1074},[1053,4489,1247],{"class":1246},[1053,4491,4492],{"class":1250},"category",[1053,4494,1247],{"class":1246},[1053,4496,1300],{"class":1074},[1053,4498,2175],{"class":1246},[1053,4500,4426],{"class":1250},[1053,4502,1247],{"class":1246},[1053,4504,4440],{"class":1074},[1053,4506,4508],{"class":1055,"line":4507},84,[1053,4509,4510],{"class":1074},"        ]\n",[1053,4512,4514],{"class":1055,"line":4513},85,[1053,4515,1186],{"class":1070},[1053,4517,4519,4521,4523,4525,4527],{"class":1055,"line":4518},86,[1053,4520,1651],{"class":1146},[1053,4522,1655],{"class":1654},[1053,4524,1154],{"class":1074},[1053,4526,1661],{"class":1660},[1053,4528,1166],{"class":1074},[1053,4530,4532,4534,4536,4538],{"class":1055,"line":4531},87,[1053,4533,1669],{"class":1066},[1053,4535,1737],{"class":1682},[1053,4537,1075],{"class":1074},[1053,4539,4540],{"class":1687},"title\n",[1053,4542,4544],{"class":1055,"line":4543},88,[1053,4545,1140],{"emptyLinePlaceholder":1139},[1053,4547,4549,4551,4554,4556,4558,4560,4562],{"class":1055,"line":4548},89,[1053,4550,1147],{"class":1146},[1053,4552,4553],{"class":1150}," Comment",[1053,4555,1154],{"class":1074},[1053,4557,1158],{"class":1157},[1053,4559,1075],{"class":1074},[1053,4561,1163],{"class":1157},[1053,4563,1166],{"class":1074},[1053,4565,4567],{"class":1055,"line":4566},90,[1053,4568,4569],{"class":1059},"    # Foreign key to Post\n",[1053,4571,4573,4576,4578,4580,4582,4584],{"class":1055,"line":4572},91,[1053,4574,4575],{"class":1070},"    post ",[1053,4577,1195],{"class":1074},[1053,4579,1198],{"class":1070},[1053,4581,1075],{"class":1074},[1053,4583,2801],{"class":1203},[1053,4585,1207],{"class":1074},[1053,4587,4589,4592],{"class":1055,"line":4588},92,[1053,4590,4591],{"class":1203},"        Post",[1053,4593,1216],{"class":1074},[1053,4595,4597,4599,4601,4603,4605,4607],{"class":1055,"line":4596},93,[1053,4598,1223],{"class":1222},[1053,4600,1195],{"class":1074},[1053,4602,1158],{"class":1203},[1053,4604,1075],{"class":1074},[1053,4606,1233],{"class":1232},[1053,4608,1216],{"class":1074},[1053,4610,4612,4614,4616,4618,4621],{"class":1055,"line":4611},94,[1053,4613,1241],{"class":1222},[1053,4615,1195],{"class":1074},[1053,4617,1247],{"class":1246},[1053,4619,4620],{"class":1250},"comments",[1053,4622,1254],{"class":1246},[1053,4624,4626],{"class":1055,"line":4625},95,[1053,4627,1260],{"class":1074},[1053,4629,4631],{"class":1055,"line":4630},96,[1053,4632,1186],{"class":1070},[1053,4634,4636],{"class":1055,"line":4635},97,[1053,4637,4638],{"class":1059},"    # Foreign key to User\n",[1053,4640,4642,4644,4646,4648,4650,4652],{"class":1055,"line":4641},98,[1053,4643,4079],{"class":1070},[1053,4645,1195],{"class":1074},[1053,4647,1198],{"class":1070},[1053,4649,1075],{"class":1074},[1053,4651,2801],{"class":1203},[1053,4653,1207],{"class":1074},[1053,4655,4657,4659],{"class":1055,"line":4656},99,[1053,4658,1213],{"class":1203},[1053,4660,1216],{"class":1074},[1053,4662,4664,4666,4668,4670,4672,4674],{"class":1055,"line":4663},100,[1053,4665,1223],{"class":1222},[1053,4667,1195],{"class":1074},[1053,4669,1158],{"class":1203},[1053,4671,1075],{"class":1074},[1053,4673,1233],{"class":1232},[1053,4675,1216],{"class":1074},[1053,4677,4679,4681,4683,4685,4687],{"class":1055,"line":4678},101,[1053,4680,1241],{"class":1222},[1053,4682,1195],{"class":1074},[1053,4684,1247],{"class":1246},[1053,4686,4620],{"class":1250},[1053,4688,1254],{"class":1246},[1053,4690,4692],{"class":1055,"line":4691},102,[1053,4693,1260],{"class":1074},[1053,4695,4697],{"class":1055,"line":4696},103,[1053,4698,1186],{"class":1070},[1053,4700,4702],{"class":1055,"line":4701},104,[1053,4703,4704],{"class":1059},"    # Self-referential foreign key for nested comments\n",[1053,4706,4708,4710,4712,4714,4716,4718],{"class":1055,"line":4707},105,[1053,4709,3512],{"class":1070},[1053,4711,1195],{"class":1074},[1053,4713,1198],{"class":1070},[1053,4715,1075],{"class":1074},[1053,4717,2801],{"class":1203},[1053,4719,1207],{"class":1074},[1053,4721,4723,4725,4727,4729],{"class":1055,"line":4722},106,[1053,4724,3527],{"class":1246},[1053,4726,1661],{"class":1250},[1053,4728,1247],{"class":1246},[1053,4730,1216],{"class":1074},[1053,4732,4734,4736,4738,4740,4742,4744],{"class":1055,"line":4733},107,[1053,4735,1223],{"class":1222},[1053,4737,1195],{"class":1074},[1053,4739,1158],{"class":1203},[1053,4741,1075],{"class":1074},[1053,4743,1233],{"class":1232},[1053,4745,1216],{"class":1074},[1053,4747,4749,4751,4753,4755],{"class":1055,"line":4748},108,[1053,4750,3555],{"class":1222},[1053,4752,1195],{"class":1074},[1053,4754,1309],{"class":1308},[1053,4756,1216],{"class":1074},[1053,4758,4760,4762,4764,4766],{"class":1055,"line":4759},109,[1053,4761,3566],{"class":1222},[1053,4763,1195],{"class":1074},[1053,4765,1309],{"class":1308},[1053,4767,1216],{"class":1074},[1053,4769,4771,4773,4775,4777,4780],{"class":1055,"line":4770},110,[1053,4772,1241],{"class":1222},[1053,4774,1195],{"class":1074},[1053,4776,1247],{"class":1246},[1053,4778,4779],{"class":1250},"replies",[1053,4781,1254],{"class":1246},[1053,4783,4785],{"class":1055,"line":4784},111,[1053,4786,1260],{"class":1074},[1053,4788,4790],{"class":1055,"line":4789},112,[1053,4791,1186],{"class":1070},[1053,4793,4795,4797,4799,4801,4803,4805],{"class":1055,"line":4794},113,[1053,4796,4223],{"class":1070},[1053,4798,1195],{"class":1074},[1053,4800,1198],{"class":1070},[1053,4802,1075],{"class":1074},[1053,4804,1286],{"class":1203},[1053,4806,1849],{"class":1074},[1053,4808,4810,4813,4815,4817,4819,4821,4823,4825,4827,4829],{"class":1055,"line":4809},114,[1053,4811,4812],{"class":1070},"    is_approved ",[1053,4814,1195],{"class":1074},[1053,4816,1198],{"class":1070},[1053,4818,1075],{"class":1074},[1053,4820,1548],{"class":1203},[1053,4822,1154],{"class":1074},[1053,4824,1553],{"class":1222},[1053,4826,1195],{"class":1074},[1053,4828,1582],{"class":1308},[1053,4830,1312],{"class":1074},[1053,4832,4834,4836,4838,4840,4842,4844,4846,4848,4850,4852],{"class":1055,"line":4833},115,[1053,4835,1595],{"class":1070},[1053,4837,1195],{"class":1074},[1053,4839,1198],{"class":1070},[1053,4841,1075],{"class":1074},[1053,4843,1604],{"class":1203},[1053,4845,1154],{"class":1074},[1053,4847,1609],{"class":1222},[1053,4849,1195],{"class":1074},[1053,4851,1309],{"class":1308},[1053,4853,1312],{"class":1074},[1053,4855,4857],{"class":1055,"line":4856},116,[1053,4858,1186],{"class":1070},[1053,4860,4862,4864,4866],{"class":1055,"line":4861},117,[1053,4863,3598],{"class":1146},[1053,4865,3601],{"class":1150},[1053,4867,1806],{"class":1074},[1053,4869,4871,4873,4875,4877,4879,4882,4884],{"class":1055,"line":4870},118,[1053,4872,3622],{"class":1070},[1053,4874,1195],{"class":1074},[1053,4876,3627],{"class":1074},[1053,4878,1247],{"class":1246},[1053,4880,4881],{"class":1250},"created_at",[1053,4883,1247],{"class":1246},[1053,4885,3637],{"class":1074},[1053,4887,4889],{"class":1055,"line":4888},119,[1053,4890,1186],{"class":1070},[1053,4892,4894,4896,4898,4900,4902],{"class":1055,"line":4893},120,[1053,4895,1651],{"class":1146},[1053,4897,1655],{"class":1654},[1053,4899,1154],{"class":1074},[1053,4901,1661],{"class":1660},[1053,4903,1166],{"class":1074},[1053,4905,4907,4909,4911,4914,4916,4918,4920,4922,4924,4926,4928,4931,4933,4935,4937,4940,4942,4945,4947],{"class":1055,"line":4906},121,[1053,4908,1669],{"class":1066},[1053,4910,1672],{"class":1146},[1053,4912,4913],{"class":1250},"'Comment by ",[1053,4915,1679],{"class":1678},[1053,4917,1661],{"class":1682},[1053,4919,1075],{"class":1074},[1053,4921,4460],{"class":1687},[1053,4923,1075],{"class":1074},[1053,4925,1693],{"class":1687},[1053,4927,1696],{"class":1678},[1053,4929,4930],{"class":1250}," on ",[1053,4932,1679],{"class":1678},[1053,4934,1661],{"class":1682},[1053,4936,1075],{"class":1074},[1053,4938,4939],{"class":1687},"post",[1053,4941,1075],{"class":1074},[1053,4943,4944],{"class":1687},"title",[1053,4946,1696],{"class":1678},[1053,4948,1254],{"class":1250},[1053,4950,4952],{"class":1055,"line":4951},122,[1053,4953,1186],{"class":1070},[1053,4955,4957,4959],{"class":1055,"line":4956},123,[1053,4958,1710],{"class":1074},[1053,4960,1714],{"class":1713},[1053,4962,4964,4966,4969,4971,4973],{"class":1055,"line":4963},124,[1053,4965,1651],{"class":1146},[1053,4967,4968],{"class":1722}," is_reply",[1053,4970,1154],{"class":1074},[1053,4972,1661],{"class":1660},[1053,4974,1166],{"class":1074},[1053,4976,4978,4980,4982,4984,4986,4988,4990],{"class":1055,"line":4977},125,[1053,4979,1669],{"class":1066},[1053,4981,1737],{"class":1682},[1053,4983,1075],{"class":1074},[1053,4985,3697],{"class":1687},[1053,4987,3700],{"class":1752},[1053,4989,2699],{"class":1752},[1053,4991,1951],{"class":1308},[1053,4993,4995],{"class":1055,"line":4994},126,[1053,4996,1186],{"class":1070},[1053,4998,5000,5002,5005,5007,5009],{"class":1055,"line":4999},127,[1053,5001,1651],{"class":1146},[1053,5003,5004],{"class":1722}," get_replies",[1053,5006,1154],{"class":1074},[1053,5008,1661],{"class":1660},[1053,5010,1166],{"class":1074},[1053,5012,5014,5016,5019],{"class":1055,"line":5013},128,[1053,5015,3724],{"class":1172},[1053,5017,5018],{"class":1176},"Get all replies to this comment",[1053,5020,1180],{"class":1172},[1053,5022,5024,5026,5028,5030,5032,5034,5037,5039,5042,5044,5046],{"class":1055,"line":5023},129,[1053,5025,1669],{"class":1066},[1053,5027,1737],{"class":1682},[1053,5029,1075],{"class":1074},[1053,5031,4779],{"class":1687},[1053,5033,1075],{"class":1074},[1053,5035,5036],{"class":1203},"filter",[1053,5038,1154],{"class":1074},[1053,5040,5041],{"class":1222},"is_approved",[1053,5043,1195],{"class":1074},[1053,5045,1309],{"class":1308},[1053,5047,1312],{"class":1074},[1053,5049,5051],{"class":1055,"line":5050},130,[1053,5052,1140],{"emptyLinePlaceholder":1139},[1053,5054,5056],{"class":1055,"line":5055},131,[1053,5057,2209],{"class":1059},[1053,5059,5061],{"class":1055,"line":5060},132,[1053,5062,5063],{"class":1059},"# Get all posts by an author\n",[1053,5065,5067],{"class":1055,"line":5066},133,[1053,5068,5069],{"class":1059},"# author_posts = user.posts.all()\n",[1053,5071,5073],{"class":1055,"line":5072},134,[1053,5074,1140],{"emptyLinePlaceholder":1139},[1053,5076,5078],{"class":1055,"line":5077},135,[1053,5079,5080],{"class":1059},"# Get all posts in a category\n",[1053,5082,5084],{"class":1055,"line":5083},136,[1053,5085,5086],{"class":1059},"# category_posts = category.posts.filter(status='published')\n",[1053,5088,5090],{"class":1055,"line":5089},137,[1053,5091,1140],{"emptyLinePlaceholder":1139},[1053,5093,5095],{"class":1055,"line":5094},138,[1053,5096,5097],{"class":1059},"# Get all comments for a post\n",[1053,5099,5101],{"class":1055,"line":5100},139,[1053,5102,5103],{"class":1059},"# post_comments = post.comments.filter(is_approved=True)\n",[1053,5105,5107],{"class":1055,"line":5106},140,[1053,5108,1140],{"emptyLinePlaceholder":1139},[1053,5110,5112],{"class":1055,"line":5111},141,[1053,5113,5114],{"class":1059},"# Get all replies to a comment\n",[1053,5116,5118],{"class":1055,"line":5117},142,[1053,5119,5120],{"class":1059},"# comment_replies = comment.replies.all()\n",[1038,5122,5124],{"id":5123},"foreign-key-options-and-behaviors","Foreign Key Options and Behaviors",[1043,5126,5128],{"className":1045,"code":5127,"language":1047,"meta":1048,"style":1048},"# models.py\nfrom django.db import models\n\nclass Publisher(models.Model):\n    name = models.CharField(max_length=200)\n    address = models.TextField()\n    \n    def __str__(self):\n        return self.name\n\nclass Author(models.Model):\n    name = models.CharField(max_length=100)\n    email = models.EmailField()\n    \n    def __str__(self):\n        return self.name\n\nclass Book(models.Model):\n    title = models.CharField(max_length=200)\n    isbn = models.CharField(max_length=13, unique=True)\n    \n    # CASCADE: Delete books when publisher is deleted\n    publisher = models.ForeignKey(\n        Publisher,\n        on_delete=models.CASCADE,\n        related_name='books'\n    )\n    \n    # SET_NULL: Keep books but set author to NULL when author is deleted\n    author = models.ForeignKey(\n        Author,\n        on_delete=models.SET_NULL,\n        null=True,\n        blank=True,\n        related_name='books'\n    )\n    \n    # PROTECT: Prevent deletion of referenced object\n    primary_category = models.ForeignKey(\n        'Category',\n        on_delete=models.PROTECT,\n        related_name='primary_books'\n    )\n    \n    # SET_DEFAULT: Set to default value when referenced object is deleted\n    backup_publisher = models.ForeignKey(\n        Publisher,\n        on_delete=models.SET_DEFAULT,\n        default=1,  # Must have a publisher with id=1\n        related_name='backup_books'\n    )\n    \n    publication_date = models.DateField()\n    pages = models.PositiveIntegerField()\n    \n    def __str__(self):\n        return self.title\n\n# Custom deletion behavior\ndef get_default_author():\n    \"\"\"Get or create a default 'Unknown Author'\"\"\"\n    author, created = Author.objects.get_or_create(\n        name='Unknown Author',\n        defaults={'email': 'unknown@example.com'}\n    )\n    return author.pk\n\nclass Article(models.Model):\n    title = models.CharField(max_length=200)\n    \n    # SET: Call a function when referenced object is deleted\n    author = models.ForeignKey(\n        Author,\n        on_delete=models.SET(get_default_author),\n        related_name='articles'\n    )\n    \n    content = models.TextField()\n    \n    def __str__(self):\n        return self.title\n\nclass Order(models.Model):\n    customer = models.ForeignKey(\n        'Customer',\n        on_delete=models.CASCADE,\n        related_name='orders'\n    )\n    \n    order_date = models.DateTimeField(auto_now_add=True)\n    total_amount = models.DecimalField(max_digits=10, decimal_places=2)\n    \n    def __str__(self):\n        return f'Order #{self.pk}'\n\nclass OrderItem(models.Model):\n    order = models.ForeignKey(\n        Order,\n        on_delete=models.CASCADE,\n        related_name='items'\n    )\n    \n    product = models.ForeignKey(\n        'Product',\n        on_delete=models.CASCADE,\n        related_name='order_items'\n    )\n    \n    quantity = models.PositiveIntegerField()\n    unit_price = models.DecimalField(max_digits=8, decimal_places=2)\n    \n    @property\n    def total_price(self):\n        return self.quantity * self.unit_price\n    \n    def __str__(self):\n        return f'{self.quantity}x {self.product.name}'\n",[1050,5129,5130,5134,5148,5152,5169,5191,5206,5210,5222,5232,5236,5253,5275,5289,5293,5305,5315,5319,5336,5358,5390,5394,5399,5414,5421,5435,5448,5452,5456,5461,5475,5482,5496,5506,5516,5528,5532,5536,5541,5556,5567,5582,5595,5599,5603,5608,5623,5629,5644,5659,5672,5676,5680,5695,5710,5714,5726,5736,5740,5745,5754,5763,5788,5804,5832,5836,5849,5853,5870,5892,5896,5901,5915,5921,5941,5954,5958,5962,5976,5980,5992,6002,6006,6023,6038,6049,6063,6076,6080,6084,6107,6138,6142,6154,6176,6180,6197,6212,6219,6233,6246,6250,6254,6269,6280,6294,6307,6311,6315,6330,6362,6366,6372,6385,6405,6409,6421],{"__ignoreMap":1048},[1053,5131,5132],{"class":1055,"line":1056},[1053,5133,1060],{"class":1059},[1053,5135,5136,5138,5140,5142,5144,5146],{"class":1055,"line":1063},[1053,5137,1067],{"class":1066},[1053,5139,1071],{"class":1070},[1053,5141,1075],{"class":1074},[1053,5143,1078],{"class":1070},[1053,5145,1081],{"class":1066},[1053,5147,1084],{"class":1070},[1053,5149,5150],{"class":1055,"line":1087},[1053,5151,1140],{"emptyLinePlaceholder":1139},[1053,5153,5154,5156,5159,5161,5163,5165,5167],{"class":1055,"line":1114},[1053,5155,1147],{"class":1146},[1053,5157,5158],{"class":1150}," Publisher",[1053,5160,1154],{"class":1074},[1053,5162,1158],{"class":1157},[1053,5164,1075],{"class":1074},[1053,5166,1163],{"class":1157},[1053,5168,1166],{"class":1074},[1053,5170,5171,5173,5175,5177,5179,5181,5183,5185,5187,5189],{"class":1055,"line":1136},[1053,5172,2280],{"class":1070},[1053,5174,1195],{"class":1074},[1053,5176,1198],{"class":1070},[1053,5178,1075],{"class":1074},[1053,5180,1409],{"class":1203},[1053,5182,1154],{"class":1074},[1053,5184,1291],{"class":1222},[1053,5186,1195],{"class":1074},[1053,5188,2297],{"class":1296},[1053,5190,1312],{"class":1074},[1053,5192,5193,5196,5198,5200,5202,5204],{"class":1055,"line":1143},[1053,5194,5195],{"class":1070},"    address ",[1053,5197,1195],{"class":1074},[1053,5199,1198],{"class":1070},[1053,5201,1075],{"class":1074},[1053,5203,1286],{"class":1203},[1053,5205,1849],{"class":1074},[1053,5207,5208],{"class":1055,"line":1169},[1053,5209,1186],{"class":1070},[1053,5211,5212,5214,5216,5218,5220],{"class":1055,"line":1183},[1053,5213,1651],{"class":1146},[1053,5215,1655],{"class":1654},[1053,5217,1154],{"class":1074},[1053,5219,1661],{"class":1660},[1053,5221,1166],{"class":1074},[1053,5223,5224,5226,5228,5230],{"class":1055,"line":1189},[1053,5225,1669],{"class":1066},[1053,5227,1737],{"class":1682},[1053,5229,1075],{"class":1074},[1053,5231,2341],{"class":1687},[1053,5233,5234],{"class":1055,"line":1210},[1053,5235,1140],{"emptyLinePlaceholder":1139},[1053,5237,5238,5240,5243,5245,5247,5249,5251],{"class":1055,"line":1219},[1053,5239,1147],{"class":1146},[1053,5241,5242],{"class":1150}," Author",[1053,5244,1154],{"class":1074},[1053,5246,1158],{"class":1157},[1053,5248,1075],{"class":1074},[1053,5250,1163],{"class":1157},[1053,5252,1166],{"class":1074},[1053,5254,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273],{"class":1055,"line":1238},[1053,5256,2280],{"class":1070},[1053,5258,1195],{"class":1074},[1053,5260,1198],{"class":1070},[1053,5262,1075],{"class":1074},[1053,5264,1409],{"class":1203},[1053,5266,1154],{"class":1074},[1053,5268,1291],{"class":1222},[1053,5270,1195],{"class":1074},[1053,5272,3106],{"class":1296},[1053,5274,1312],{"class":1074},[1053,5276,5277,5279,5281,5283,5285,5287],{"class":1055,"line":1257},[1053,5278,2872],{"class":1070},[1053,5280,1195],{"class":1074},[1053,5282,1198],{"class":1070},[1053,5284,1075],{"class":1074},[1053,5286,2881],{"class":1203},[1053,5288,1849],{"class":1074},[1053,5290,5291],{"class":1055,"line":1263},[1053,5292,1186],{"class":1070},[1053,5294,5295,5297,5299,5301,5303],{"class":1055,"line":1268},[1053,5296,1651],{"class":1146},[1053,5298,1655],{"class":1654},[1053,5300,1154],{"class":1074},[1053,5302,1661],{"class":1660},[1053,5304,1166],{"class":1074},[1053,5306,5307,5309,5311,5313],{"class":1055,"line":1274},[1053,5308,1669],{"class":1066},[1053,5310,1737],{"class":1682},[1053,5312,1075],{"class":1074},[1053,5314,2341],{"class":1687},[1053,5316,5317],{"class":1055,"line":1315},[1053,5318,1140],{"emptyLinePlaceholder":1139},[1053,5320,5321,5323,5326,5328,5330,5332,5334],{"class":1055,"line":1349},[1053,5322,1147],{"class":1146},[1053,5324,5325],{"class":1150}," Book",[1053,5327,1154],{"class":1074},[1053,5329,1158],{"class":1157},[1053,5331,1075],{"class":1074},[1053,5333,1163],{"class":1157},[1053,5335,1166],{"class":1074},[1053,5337,5338,5340,5342,5344,5346,5348,5350,5352,5354,5356],{"class":1055,"line":1397},[1053,5339,4017],{"class":1070},[1053,5341,1195],{"class":1074},[1053,5343,1198],{"class":1070},[1053,5345,1075],{"class":1074},[1053,5347,1409],{"class":1203},[1053,5349,1154],{"class":1074},[1053,5351,1291],{"class":1222},[1053,5353,1195],{"class":1074},[1053,5355,2297],{"class":1296},[1053,5357,1312],{"class":1074},[1053,5359,5360,5363,5365,5367,5369,5371,5373,5375,5377,5380,5382,5384,5386,5388],{"class":1055,"line":1431},[1053,5361,5362],{"class":1070},"    isbn ",[1053,5364,1195],{"class":1074},[1053,5366,1198],{"class":1070},[1053,5368,1075],{"class":1074},[1053,5370,1409],{"class":1203},[1053,5372,1154],{"class":1074},[1053,5374,1291],{"class":1222},[1053,5376,1195],{"class":1074},[1053,5378,5379],{"class":1296},"13",[1053,5381,1300],{"class":1074},[1053,5383,2646],{"class":1222},[1053,5385,1195],{"class":1074},[1053,5387,1309],{"class":1308},[1053,5389,1312],{"class":1074},[1053,5391,5392],{"class":1055,"line":1457},[1053,5393,1186],{"class":1070},[1053,5395,5396],{"class":1055,"line":1462},[1053,5397,5398],{"class":1059},"    # CASCADE: Delete books when publisher is deleted\n",[1053,5400,5401,5404,5406,5408,5410,5412],{"class":1055,"line":1468},[1053,5402,5403],{"class":1070},"    publisher ",[1053,5405,1195],{"class":1074},[1053,5407,1198],{"class":1070},[1053,5409,1075],{"class":1074},[1053,5411,2801],{"class":1203},[1053,5413,1207],{"class":1074},[1053,5415,5416,5419],{"class":1055,"line":1501},[1053,5417,5418],{"class":1203},"        Publisher",[1053,5420,1216],{"class":1074},[1053,5422,5423,5425,5427,5429,5431,5433],{"class":1055,"line":1525},[1053,5424,1223],{"class":1222},[1053,5426,1195],{"class":1074},[1053,5428,1158],{"class":1203},[1053,5430,1075],{"class":1074},[1053,5432,1233],{"class":1232},[1053,5434,1216],{"class":1074},[1053,5436,5437,5439,5441,5443,5446],{"class":1055,"line":1530},[1053,5438,1241],{"class":1222},[1053,5440,1195],{"class":1074},[1053,5442,1247],{"class":1246},[1053,5444,5445],{"class":1250},"books",[1053,5447,1254],{"class":1246},[1053,5449,5450],{"class":1055,"line":1536},[1053,5451,1260],{"class":1074},[1053,5453,5454],{"class":1055,"line":1562},[1053,5455,1186],{"class":1070},[1053,5457,5458],{"class":1055,"line":1587},[1053,5459,5460],{"class":1059},"    # SET_NULL: Keep books but set author to NULL when author is deleted\n",[1053,5462,5463,5465,5467,5469,5471,5473],{"class":1055,"line":1592},[1053,5464,4079],{"class":1070},[1053,5466,1195],{"class":1074},[1053,5468,1198],{"class":1070},[1053,5470,1075],{"class":1074},[1053,5472,2801],{"class":1203},[1053,5474,1207],{"class":1074},[1053,5476,5477,5480],{"class":1055,"line":1618},[1053,5478,5479],{"class":1203},"        Author",[1053,5481,1216],{"class":1074},[1053,5483,5484,5486,5488,5490,5492,5494],{"class":1055,"line":1643},[1053,5485,1223],{"class":1222},[1053,5487,1195],{"class":1074},[1053,5489,1158],{"class":1203},[1053,5491,1075],{"class":1074},[1053,5493,4173],{"class":1232},[1053,5495,1216],{"class":1074},[1053,5497,5498,5500,5502,5504],{"class":1055,"line":1648},[1053,5499,3555],{"class":1222},[1053,5501,1195],{"class":1074},[1053,5503,1309],{"class":1308},[1053,5505,1216],{"class":1074},[1053,5507,5508,5510,5512,5514],{"class":1055,"line":1666},[1053,5509,3566],{"class":1222},[1053,5511,1195],{"class":1074},[1053,5513,1309],{"class":1308},[1053,5515,1216],{"class":1074},[1053,5517,5518,5520,5522,5524,5526],{"class":1055,"line":1702},[1053,5519,1241],{"class":1222},[1053,5521,1195],{"class":1074},[1053,5523,1247],{"class":1246},[1053,5525,5445],{"class":1250},[1053,5527,1254],{"class":1246},[1053,5529,5530],{"class":1055,"line":1707},[1053,5531,1260],{"class":1074},[1053,5533,5534],{"class":1055,"line":1717},[1053,5535,1186],{"class":1070},[1053,5537,5538],{"class":1055,"line":1732},[1053,5539,5540],{"class":1059},"    # PROTECT: Prevent deletion of referenced object\n",[1053,5542,5543,5546,5548,5550,5552,5554],{"class":1055,"line":1767},[1053,5544,5545],{"class":1070},"    primary_category ",[1053,5547,1195],{"class":1074},[1053,5549,1198],{"class":1070},[1053,5551,1075],{"class":1074},[1053,5553,2801],{"class":1203},[1053,5555,1207],{"class":1074},[1053,5557,5558,5560,5563,5565],{"class":1055,"line":1772},[1053,5559,3527],{"class":1246},[1053,5561,5562],{"class":1250},"Category",[1053,5564,1247],{"class":1246},[1053,5566,1216],{"class":1074},[1053,5568,5569,5571,5573,5575,5577,5580],{"class":1055,"line":1779},[1053,5570,1223],{"class":1222},[1053,5572,1195],{"class":1074},[1053,5574,1158],{"class":1203},[1053,5576,1075],{"class":1074},[1053,5578,5579],{"class":1232},"PROTECT",[1053,5581,1216],{"class":1074},[1053,5583,5584,5586,5588,5590,5593],{"class":1055,"line":1793},[1053,5585,1241],{"class":1222},[1053,5587,1195],{"class":1074},[1053,5589,1247],{"class":1246},[1053,5591,5592],{"class":1250},"primary_books",[1053,5594,1254],{"class":1246},[1053,5596,5597],{"class":1055,"line":1809},[1053,5598,1260],{"class":1074},[1053,5600,5601],{"class":1055,"line":1827},[1053,5602,1186],{"class":1070},[1053,5604,5605],{"class":1055,"line":1852},[1053,5606,5607],{"class":1059},"    # SET_DEFAULT: Set to default value when referenced object is deleted\n",[1053,5609,5610,5613,5615,5617,5619,5621],{"class":1055,"line":1884},[1053,5611,5612],{"class":1070},"    backup_publisher ",[1053,5614,1195],{"class":1074},[1053,5616,1198],{"class":1070},[1053,5618,1075],{"class":1074},[1053,5620,2801],{"class":1203},[1053,5622,1207],{"class":1074},[1053,5624,5625,5627],{"class":1055,"line":1940},[1053,5626,5418],{"class":1203},[1053,5628,1216],{"class":1074},[1053,5630,5631,5633,5635,5637,5639,5642],{"class":1055,"line":1946},[1053,5632,1223],{"class":1222},[1053,5634,1195],{"class":1074},[1053,5636,1158],{"class":1203},[1053,5638,1075],{"class":1074},[1053,5640,5641],{"class":1232},"SET_DEFAULT",[1053,5643,1216],{"class":1074},[1053,5645,5646,5649,5651,5654,5656],{"class":1055,"line":1954},[1053,5647,5648],{"class":1222},"        default",[1053,5650,1195],{"class":1074},[1053,5652,5653],{"class":1296},"1",[1053,5655,1300],{"class":1074},[1053,5657,5658],{"class":1059},"  # Must have a publisher with id=1\n",[1053,5660,5661,5663,5665,5667,5670],{"class":1055,"line":1959},[1053,5662,1241],{"class":1222},[1053,5664,1195],{"class":1074},[1053,5666,1247],{"class":1246},[1053,5668,5669],{"class":1250},"backup_books",[1053,5671,1254],{"class":1246},[1053,5673,5674],{"class":1055,"line":1965},[1053,5675,1260],{"class":1074},[1053,5677,5678],{"class":1055,"line":1991},[1053,5679,1186],{"class":1070},[1053,5681,5682,5685,5687,5689,5691,5693],{"class":1055,"line":2008},[1053,5683,5684],{"class":1070},"    publication_date ",[1053,5686,1195],{"class":1074},[1053,5688,1198],{"class":1070},[1053,5690,1075],{"class":1074},[1053,5692,1327],{"class":1203},[1053,5694,1849],{"class":1074},[1053,5696,5697,5700,5702,5704,5706,5708],{"class":1055,"line":2013},[1053,5698,5699],{"class":1070},"    pages ",[1053,5701,1195],{"class":1074},[1053,5703,1198],{"class":1070},[1053,5705,1075],{"class":1074},[1053,5707,2608],{"class":1203},[1053,5709,1849],{"class":1074},[1053,5711,5712],{"class":1055,"line":2039},[1053,5713,1186],{"class":1070},[1053,5715,5716,5718,5720,5722,5724],{"class":1055,"line":2074},[1053,5717,1651],{"class":1146},[1053,5719,1655],{"class":1654},[1053,5721,1154],{"class":1074},[1053,5723,1661],{"class":1660},[1053,5725,1166],{"class":1074},[1053,5727,5728,5730,5732,5734],{"class":1055,"line":2084},[1053,5729,1669],{"class":1066},[1053,5731,1737],{"class":1682},[1053,5733,1075],{"class":1074},[1053,5735,4540],{"class":1687},[1053,5737,5738],{"class":1055,"line":2111},[1053,5739,1140],{"emptyLinePlaceholder":1139},[1053,5741,5742],{"class":1055,"line":2116},[1053,5743,5744],{"class":1059},"# Custom deletion behavior\n",[1053,5746,5747,5749,5752],{"class":1055,"line":2137},[1053,5748,2042],{"class":1146},[1053,5750,5751],{"class":1722}," get_default_author",[1053,5753,3860],{"class":1074},[1053,5755,5756,5758,5761],{"class":1055,"line":2161},[1053,5757,1173],{"class":1172},[1053,5759,5760],{"class":1176},"Get or create a default 'Unknown Author'",[1053,5762,1180],{"class":1172},[1053,5764,5765,5768,5770,5773,5775,5777,5779,5781,5783,5786],{"class":1055,"line":2184},[1053,5766,5767],{"class":1070},"    author",[1053,5769,1300],{"class":1074},[1053,5771,5772],{"class":1070}," created ",[1053,5774,1195],{"class":1074},[1053,5776,5242],{"class":1070},[1053,5778,1075],{"class":1074},[1053,5780,2092],{"class":1687},[1053,5782,1075],{"class":1074},[1053,5784,5785],{"class":1203},"get_or_create",[1053,5787,1207],{"class":1074},[1053,5789,5790,5793,5795,5797,5800,5802],{"class":1055,"line":2201},[1053,5791,5792],{"class":1222},"        name",[1053,5794,1195],{"class":1074},[1053,5796,1247],{"class":1246},[1053,5798,5799],{"class":1250},"Unknown Author",[1053,5801,1247],{"class":1246},[1053,5803,1216],{"class":1074},[1053,5805,5806,5809,5812,5814,5817,5819,5822,5824,5827,5829],{"class":1055,"line":2206},[1053,5807,5808],{"class":1222},"        defaults",[1053,5810,5811],{"class":1074},"={",[1053,5813,1247],{"class":1246},[1053,5815,5816],{"class":1250},"email",[1053,5818,1247],{"class":1246},[1053,5820,5821],{"class":1074},":",[1053,5823,2175],{"class":1246},[1053,5825,5826],{"class":1250},"unknown@example.com",[1053,5828,1247],{"class":1246},[1053,5830,5831],{"class":1074},"}\n",[1053,5833,5834],{"class":1055,"line":2212},[1053,5835,1260],{"class":1074},[1053,5837,5838,5841,5844,5846],{"class":1055,"line":2218},[1053,5839,5840],{"class":1066},"    return",[1053,5842,5843],{"class":1070}," author",[1053,5845,1075],{"class":1074},[1053,5847,5848],{"class":1687},"pk\n",[1053,5850,5851],{"class":1055,"line":2224},[1053,5852,1140],{"emptyLinePlaceholder":1139},[1053,5854,5855,5857,5860,5862,5864,5866,5868],{"class":1055,"line":3229},[1053,5856,1147],{"class":1146},[1053,5858,5859],{"class":1150}," Article",[1053,5861,1154],{"class":1074},[1053,5863,1158],{"class":1157},[1053,5865,1075],{"class":1074},[1053,5867,1163],{"class":1157},[1053,5869,1166],{"class":1074},[1053,5871,5872,5874,5876,5878,5880,5882,5884,5886,5888,5890],{"class":1055,"line":3235},[1053,5873,4017],{"class":1070},[1053,5875,1195],{"class":1074},[1053,5877,1198],{"class":1070},[1053,5879,1075],{"class":1074},[1053,5881,1409],{"class":1203},[1053,5883,1154],{"class":1074},[1053,5885,1291],{"class":1222},[1053,5887,1195],{"class":1074},[1053,5889,2297],{"class":1296},[1053,5891,1312],{"class":1074},[1053,5893,5894],{"class":1055,"line":3259},[1053,5895,1186],{"class":1070},[1053,5897,5898],{"class":1055,"line":3283},[1053,5899,5900],{"class":1059},"    # SET: Call a function when referenced object is deleted\n",[1053,5902,5903,5905,5907,5909,5911,5913],{"class":1055,"line":3307},[1053,5904,4079],{"class":1070},[1053,5906,1195],{"class":1074},[1053,5908,1198],{"class":1070},[1053,5910,1075],{"class":1074},[1053,5912,2801],{"class":1203},[1053,5914,1207],{"class":1074},[1053,5916,5917,5919],{"class":1055,"line":3312},[1053,5918,5479],{"class":1203},[1053,5920,1216],{"class":1074},[1053,5922,5923,5925,5927,5929,5931,5934,5936,5939],{"class":1055,"line":3325},[1053,5924,1223],{"class":1222},[1053,5926,1195],{"class":1074},[1053,5928,1158],{"class":1203},[1053,5930,1075],{"class":1074},[1053,5932,5933],{"class":1203},"SET",[1053,5935,1154],{"class":1074},[1053,5937,5938],{"class":1203},"get_default_author",[1053,5940,3959],{"class":1074},[1053,5942,5943,5945,5947,5949,5952],{"class":1055,"line":4308},[1053,5944,1241],{"class":1222},[1053,5946,1195],{"class":1074},[1053,5948,1247],{"class":1246},[1053,5950,5951],{"class":1250},"articles",[1053,5953,1254],{"class":1246},[1053,5955,5956],{"class":1055,"line":4331},[1053,5957,1260],{"class":1074},[1053,5959,5960],{"class":1055,"line":4363},[1053,5961,1186],{"class":1070},[1053,5963,5964,5966,5968,5970,5972,5974],{"class":1055,"line":4368},[1053,5965,4223],{"class":1070},[1053,5967,1195],{"class":1074},[1053,5969,1198],{"class":1070},[1053,5971,1075],{"class":1074},[1053,5973,1286],{"class":1203},[1053,5975,1849],{"class":1074},[1053,5977,5978],{"class":1055,"line":4377},[1053,5979,1186],{"class":1070},[1053,5981,5982,5984,5986,5988,5990],{"class":1055,"line":4395},[1053,5983,1651],{"class":1146},[1053,5985,1655],{"class":1654},[1053,5987,1154],{"class":1074},[1053,5989,1661],{"class":1660},[1053,5991,1166],{"class":1074},[1053,5993,5994,5996,5998,6000],{"class":1055,"line":4405},[1053,5995,1669],{"class":1066},[1053,5997,1737],{"class":1682},[1053,5999,1075],{"class":1074},[1053,6001,4540],{"class":1687},[1053,6003,6004],{"class":1055,"line":4443},[1053,6005,1140],{"emptyLinePlaceholder":1139},[1053,6007,6008,6010,6013,6015,6017,6019,6021],{"class":1055,"line":4475},[1053,6009,1147],{"class":1146},[1053,6011,6012],{"class":1150}," Order",[1053,6014,1154],{"class":1074},[1053,6016,1158],{"class":1157},[1053,6018,1075],{"class":1074},[1053,6020,1163],{"class":1157},[1053,6022,1166],{"class":1074},[1053,6024,6025,6028,6030,6032,6034,6036],{"class":1055,"line":4507},[1053,6026,6027],{"class":1070},"    customer ",[1053,6029,1195],{"class":1074},[1053,6031,1198],{"class":1070},[1053,6033,1075],{"class":1074},[1053,6035,2801],{"class":1203},[1053,6037,1207],{"class":1074},[1053,6039,6040,6042,6045,6047],{"class":1055,"line":4513},[1053,6041,3527],{"class":1246},[1053,6043,6044],{"class":1250},"Customer",[1053,6046,1247],{"class":1246},[1053,6048,1216],{"class":1074},[1053,6050,6051,6053,6055,6057,6059,6061],{"class":1055,"line":4518},[1053,6052,1223],{"class":1222},[1053,6054,1195],{"class":1074},[1053,6056,1158],{"class":1203},[1053,6058,1075],{"class":1074},[1053,6060,1233],{"class":1232},[1053,6062,1216],{"class":1074},[1053,6064,6065,6067,6069,6071,6074],{"class":1055,"line":4531},[1053,6066,1241],{"class":1222},[1053,6068,1195],{"class":1074},[1053,6070,1247],{"class":1246},[1053,6072,6073],{"class":1250},"orders",[1053,6075,1254],{"class":1246},[1053,6077,6078],{"class":1055,"line":4543},[1053,6079,1260],{"class":1074},[1053,6081,6082],{"class":1055,"line":4548},[1053,6083,1186],{"class":1070},[1053,6085,6086,6089,6091,6093,6095,6097,6099,6101,6103,6105],{"class":1055,"line":4566},[1053,6087,6088],{"class":1070},"    order_date ",[1053,6090,1195],{"class":1074},[1053,6092,1198],{"class":1070},[1053,6094,1075],{"class":1074},[1053,6096,1604],{"class":1203},[1053,6098,1154],{"class":1074},[1053,6100,1609],{"class":1222},[1053,6102,1195],{"class":1074},[1053,6104,1309],{"class":1308},[1053,6106,1312],{"class":1074},[1053,6108,6109,6112,6114,6116,6118,6120,6122,6124,6126,6128,6130,6132,6134,6136],{"class":1055,"line":4572},[1053,6110,6111],{"class":1070},"    total_amount ",[1053,6113,1195],{"class":1074},[1053,6115,1198],{"class":1070},[1053,6117,1075],{"class":1074},[1053,6119,3145],{"class":1203},[1053,6121,1154],{"class":1074},[1053,6123,3150],{"class":1222},[1053,6125,1195],{"class":1074},[1053,6127,3155],{"class":1296},[1053,6129,1300],{"class":1074},[1053,6131,3160],{"class":1222},[1053,6133,1195],{"class":1074},[1053,6135,3165],{"class":1296},[1053,6137,1312],{"class":1074},[1053,6139,6140],{"class":1055,"line":4588},[1053,6141,1186],{"class":1070},[1053,6143,6144,6146,6148,6150,6152],{"class":1055,"line":4596},[1053,6145,1651],{"class":1146},[1053,6147,1655],{"class":1654},[1053,6149,1154],{"class":1074},[1053,6151,1661],{"class":1660},[1053,6153,1166],{"class":1074},[1053,6155,6156,6158,6160,6163,6165,6167,6169,6172,6174],{"class":1055,"line":4611},[1053,6157,1669],{"class":1066},[1053,6159,1672],{"class":1146},[1053,6161,6162],{"class":1250},"'Order #",[1053,6164,1679],{"class":1678},[1053,6166,1661],{"class":1682},[1053,6168,1075],{"class":1074},[1053,6170,6171],{"class":1687},"pk",[1053,6173,1696],{"class":1678},[1053,6175,1254],{"class":1250},[1053,6177,6178],{"class":1055,"line":4625},[1053,6179,1140],{"emptyLinePlaceholder":1139},[1053,6181,6182,6184,6187,6189,6191,6193,6195],{"class":1055,"line":4630},[1053,6183,1147],{"class":1146},[1053,6185,6186],{"class":1150}," OrderItem",[1053,6188,1154],{"class":1074},[1053,6190,1158],{"class":1157},[1053,6192,1075],{"class":1074},[1053,6194,1163],{"class":1157},[1053,6196,1166],{"class":1074},[1053,6198,6199,6202,6204,6206,6208,6210],{"class":1055,"line":4635},[1053,6200,6201],{"class":1070},"    order ",[1053,6203,1195],{"class":1074},[1053,6205,1198],{"class":1070},[1053,6207,1075],{"class":1074},[1053,6209,2801],{"class":1203},[1053,6211,1207],{"class":1074},[1053,6213,6214,6217],{"class":1055,"line":4641},[1053,6215,6216],{"class":1203},"        Order",[1053,6218,1216],{"class":1074},[1053,6220,6221,6223,6225,6227,6229,6231],{"class":1055,"line":4656},[1053,6222,1223],{"class":1222},[1053,6224,1195],{"class":1074},[1053,6226,1158],{"class":1203},[1053,6228,1075],{"class":1074},[1053,6230,1233],{"class":1232},[1053,6232,1216],{"class":1074},[1053,6234,6235,6237,6239,6241,6244],{"class":1055,"line":4663},[1053,6236,1241],{"class":1222},[1053,6238,1195],{"class":1074},[1053,6240,1247],{"class":1246},[1053,6242,6243],{"class":1250},"items",[1053,6245,1254],{"class":1246},[1053,6247,6248],{"class":1055,"line":4678},[1053,6249,1260],{"class":1074},[1053,6251,6252],{"class":1055,"line":4691},[1053,6253,1186],{"class":1070},[1053,6255,6256,6259,6261,6263,6265,6267],{"class":1055,"line":4696},[1053,6257,6258],{"class":1070},"    product ",[1053,6260,1195],{"class":1074},[1053,6262,1198],{"class":1070},[1053,6264,1075],{"class":1074},[1053,6266,2801],{"class":1203},[1053,6268,1207],{"class":1074},[1053,6270,6271,6273,6276,6278],{"class":1055,"line":4701},[1053,6272,3527],{"class":1246},[1053,6274,6275],{"class":1250},"Product",[1053,6277,1247],{"class":1246},[1053,6279,1216],{"class":1074},[1053,6281,6282,6284,6286,6288,6290,6292],{"class":1055,"line":4707},[1053,6283,1223],{"class":1222},[1053,6285,1195],{"class":1074},[1053,6287,1158],{"class":1203},[1053,6289,1075],{"class":1074},[1053,6291,1233],{"class":1232},[1053,6293,1216],{"class":1074},[1053,6295,6296,6298,6300,6302,6305],{"class":1055,"line":4722},[1053,6297,1241],{"class":1222},[1053,6299,1195],{"class":1074},[1053,6301,1247],{"class":1246},[1053,6303,6304],{"class":1250},"order_items",[1053,6306,1254],{"class":1246},[1053,6308,6309],{"class":1055,"line":4733},[1053,6310,1260],{"class":1074},[1053,6312,6313],{"class":1055,"line":4748},[1053,6314,1186],{"class":1070},[1053,6316,6317,6320,6322,6324,6326,6328],{"class":1055,"line":4759},[1053,6318,6319],{"class":1070},"    quantity ",[1053,6321,1195],{"class":1074},[1053,6323,1198],{"class":1070},[1053,6325,1075],{"class":1074},[1053,6327,2608],{"class":1203},[1053,6329,1849],{"class":1074},[1053,6331,6332,6335,6337,6339,6341,6343,6345,6347,6349,6352,6354,6356,6358,6360],{"class":1055,"line":4770},[1053,6333,6334],{"class":1070},"    unit_price ",[1053,6336,1195],{"class":1074},[1053,6338,1198],{"class":1070},[1053,6340,1075],{"class":1074},[1053,6342,3145],{"class":1203},[1053,6344,1154],{"class":1074},[1053,6346,3150],{"class":1222},[1053,6348,1195],{"class":1074},[1053,6350,6351],{"class":1296},"8",[1053,6353,1300],{"class":1074},[1053,6355,3160],{"class":1222},[1053,6357,1195],{"class":1074},[1053,6359,3165],{"class":1296},[1053,6361,1312],{"class":1074},[1053,6363,6364],{"class":1055,"line":4784},[1053,6365,1186],{"class":1070},[1053,6367,6368,6370],{"class":1055,"line":4789},[1053,6369,1710],{"class":1074},[1053,6371,1714],{"class":1713},[1053,6373,6374,6376,6379,6381,6383],{"class":1055,"line":4794},[1053,6375,1651],{"class":1146},[1053,6377,6378],{"class":1722}," total_price",[1053,6380,1154],{"class":1074},[1053,6382,1661],{"class":1660},[1053,6384,1166],{"class":1074},[1053,6386,6387,6389,6391,6393,6396,6398,6400,6402],{"class":1055,"line":4809},[1053,6388,1669],{"class":1066},[1053,6390,1737],{"class":1682},[1053,6392,1075],{"class":1074},[1053,6394,6395],{"class":1687},"quantity",[1053,6397,2681],{"class":1752},[1053,6399,1737],{"class":1682},[1053,6401,1075],{"class":1074},[1053,6403,6404],{"class":1687},"unit_price\n",[1053,6406,6407],{"class":1055,"line":4833},[1053,6408,1186],{"class":1070},[1053,6410,6411,6413,6415,6417,6419],{"class":1055,"line":4856},[1053,6412,1651],{"class":1146},[1053,6414,1655],{"class":1654},[1053,6416,1154],{"class":1074},[1053,6418,1661],{"class":1660},[1053,6420,1166],{"class":1074},[1053,6422,6423,6425,6427,6429,6431,6433,6435,6437,6439,6442,6444,6446,6448,6451,6453,6455,6457],{"class":1055,"line":4861},[1053,6424,1669],{"class":1066},[1053,6426,1672],{"class":1146},[1053,6428,1247],{"class":1250},[1053,6430,1679],{"class":1678},[1053,6432,1661],{"class":1682},[1053,6434,1075],{"class":1074},[1053,6436,6395],{"class":1687},[1053,6438,1696],{"class":1678},[1053,6440,6441],{"class":1250},"x ",[1053,6443,1679],{"class":1678},[1053,6445,1661],{"class":1682},[1053,6447,1075],{"class":1074},[1053,6449,6450],{"class":1687},"product",[1053,6452,1075],{"class":1074},[1053,6454,3632],{"class":1687},[1053,6456,1696],{"class":1678},[1053,6458,1254],{"class":1250},[1030,6460,6462],{"id":6461},"many-to-many-relationships","Many-to-Many Relationships",[1026,6464,6465],{},"Many-to-many relationships allow multiple records in one table to be related to multiple records in another table.",[1038,6467,6469],{"id":6468},"simple-many-to-many","Simple Many-to-Many",[1043,6471,6473],{"className":1045,"code":6472,"language":1047,"meta":1048,"style":1048},"# models.py\nfrom django.db import models\n\nclass Tag(models.Model):\n    name = models.CharField(max_length=50, unique=True)\n    slug = models.SlugField(max_length=50, unique=True)\n    color = models.CharField(max_length=7, default='#007bff')  # Hex color\n    \n    def __str__(self):\n        return self.name\n\nclass Article(models.Model):\n    title = models.CharField(max_length=200)\n    content = models.TextField()\n    \n    # Simple many-to-many relationship\n    tags = models.ManyToManyField(\n        Tag,\n        blank=True,\n        related_name='articles',\n        help_text='Select relevant tags'\n    )\n    \n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    def __str__(self):\n        return self.title\n    \n    def get_tag_names(self):\n        \"\"\"Get comma-separated list of tag names\"\"\"\n        return ', '.join(tag.name for tag in self.tags.all())\n\n# Usage examples:\n# Add tags to an article\n# article = Article.objects.get(id=1)\n# tag1 = Tag.objects.get(name='Django')\n# tag2 = Tag.objects.get(name='Python')\n# article.tags.add(tag1, tag2)\n\n# Remove tags\n# article.tags.remove(tag1)\n\n# Set tags (replaces all existing tags)\n# article.tags.set([tag1, tag2])\n\n# Get all articles with a specific tag\n# django_articles = Tag.objects.get(name='Django').articles.all()\n\n# Get articles with multiple tags\n# articles_with_both_tags = Article.objects.filter(\n#     tags__name='Django'\n# ).filter(tags__name='Python')\n",[1050,6474,6475,6479,6493,6497,6514,6544,6574,6614,6618,6630,6640,6644,6660,6682,6696,6700,6705,6721,6728,6738,6752,6766,6770,6774,6796,6800,6812,6822,6826,6839,6848,6894,6898,6902,6907,6912,6917,6922,6927,6931,6936,6941,6945,6950,6955,6959,6964,6969,6973,6978,6983,6988],{"__ignoreMap":1048},[1053,6476,6477],{"class":1055,"line":1056},[1053,6478,1060],{"class":1059},[1053,6480,6481,6483,6485,6487,6489,6491],{"class":1055,"line":1063},[1053,6482,1067],{"class":1066},[1053,6484,1071],{"class":1070},[1053,6486,1075],{"class":1074},[1053,6488,1078],{"class":1070},[1053,6490,1081],{"class":1066},[1053,6492,1084],{"class":1070},[1053,6494,6495],{"class":1055,"line":1087},[1053,6496,1140],{"emptyLinePlaceholder":1139},[1053,6498,6499,6501,6504,6506,6508,6510,6512],{"class":1055,"line":1114},[1053,6500,1147],{"class":1146},[1053,6502,6503],{"class":1150}," Tag",[1053,6505,1154],{"class":1074},[1053,6507,1158],{"class":1157},[1053,6509,1075],{"class":1074},[1053,6511,1163],{"class":1157},[1053,6513,1166],{"class":1074},[1053,6515,6516,6518,6520,6522,6524,6526,6528,6530,6532,6534,6536,6538,6540,6542],{"class":1055,"line":1136},[1053,6517,2280],{"class":1070},[1053,6519,1195],{"class":1074},[1053,6521,1198],{"class":1070},[1053,6523,1075],{"class":1074},[1053,6525,1409],{"class":1203},[1053,6527,1154],{"class":1074},[1053,6529,1291],{"class":1222},[1053,6531,1195],{"class":1074},[1053,6533,1488],{"class":1296},[1053,6535,1300],{"class":1074},[1053,6537,2646],{"class":1222},[1053,6539,1195],{"class":1074},[1053,6541,1309],{"class":1308},[1053,6543,1312],{"class":1074},[1053,6545,6546,6548,6550,6552,6554,6556,6558,6560,6562,6564,6566,6568,6570,6572],{"class":1055,"line":1143},[1053,6547,3457],{"class":1070},[1053,6549,1195],{"class":1074},[1053,6551,1198],{"class":1070},[1053,6553,1075],{"class":1074},[1053,6555,3466],{"class":1203},[1053,6557,1154],{"class":1074},[1053,6559,1291],{"class":1222},[1053,6561,1195],{"class":1074},[1053,6563,1488],{"class":1296},[1053,6565,1300],{"class":1074},[1053,6567,2646],{"class":1222},[1053,6569,1195],{"class":1074},[1053,6571,1309],{"class":1308},[1053,6573,1312],{"class":1074},[1053,6575,6576,6579,6581,6583,6585,6587,6589,6591,6593,6596,6598,6600,6602,6604,6607,6609,6611],{"class":1055,"line":1169},[1053,6577,6578],{"class":1070},"    color ",[1053,6580,1195],{"class":1074},[1053,6582,1198],{"class":1070},[1053,6584,1075],{"class":1074},[1053,6586,1409],{"class":1203},[1053,6588,1154],{"class":1074},[1053,6590,1291],{"class":1222},[1053,6592,1195],{"class":1074},[1053,6594,6595],{"class":1296},"7",[1053,6597,1300],{"class":1074},[1053,6599,2520],{"class":1222},[1053,6601,1195],{"class":1074},[1053,6603,1247],{"class":1246},[1053,6605,6606],{"class":1250},"#007bff",[1053,6608,1247],{"class":1246},[1053,6610,1907],{"class":1074},[1053,6612,6613],{"class":1059},"  # Hex color\n",[1053,6615,6616],{"class":1055,"line":1183},[1053,6617,1186],{"class":1070},[1053,6619,6620,6622,6624,6626,6628],{"class":1055,"line":1189},[1053,6621,1651],{"class":1146},[1053,6623,1655],{"class":1654},[1053,6625,1154],{"class":1074},[1053,6627,1661],{"class":1660},[1053,6629,1166],{"class":1074},[1053,6631,6632,6634,6636,6638],{"class":1055,"line":1210},[1053,6633,1669],{"class":1066},[1053,6635,1737],{"class":1682},[1053,6637,1075],{"class":1074},[1053,6639,2341],{"class":1687},[1053,6641,6642],{"class":1055,"line":1219},[1053,6643,1140],{"emptyLinePlaceholder":1139},[1053,6645,6646,6648,6650,6652,6654,6656,6658],{"class":1055,"line":1238},[1053,6647,1147],{"class":1146},[1053,6649,5859],{"class":1150},[1053,6651,1154],{"class":1074},[1053,6653,1158],{"class":1157},[1053,6655,1075],{"class":1074},[1053,6657,1163],{"class":1157},[1053,6659,1166],{"class":1074},[1053,6661,6662,6664,6666,6668,6670,6672,6674,6676,6678,6680],{"class":1055,"line":1257},[1053,6663,4017],{"class":1070},[1053,6665,1195],{"class":1074},[1053,6667,1198],{"class":1070},[1053,6669,1075],{"class":1074},[1053,6671,1409],{"class":1203},[1053,6673,1154],{"class":1074},[1053,6675,1291],{"class":1222},[1053,6677,1195],{"class":1074},[1053,6679,2297],{"class":1296},[1053,6681,1312],{"class":1074},[1053,6683,6684,6686,6688,6690,6692,6694],{"class":1055,"line":1263},[1053,6685,4223],{"class":1070},[1053,6687,1195],{"class":1074},[1053,6689,1198],{"class":1070},[1053,6691,1075],{"class":1074},[1053,6693,1286],{"class":1203},[1053,6695,1849],{"class":1074},[1053,6697,6698],{"class":1055,"line":1268},[1053,6699,1186],{"class":1070},[1053,6701,6702],{"class":1055,"line":1274},[1053,6703,6704],{"class":1059},"    # Simple many-to-many relationship\n",[1053,6706,6707,6710,6712,6714,6716,6719],{"class":1055,"line":1315},[1053,6708,6709],{"class":1070},"    tags ",[1053,6711,1195],{"class":1074},[1053,6713,1198],{"class":1070},[1053,6715,1075],{"class":1074},[1053,6717,6718],{"class":1203},"ManyToManyField",[1053,6720,1207],{"class":1074},[1053,6722,6723,6726],{"class":1055,"line":1349},[1053,6724,6725],{"class":1203},"        Tag",[1053,6727,1216],{"class":1074},[1053,6729,6730,6732,6734,6736],{"class":1055,"line":1397},[1053,6731,3566],{"class":1222},[1053,6733,1195],{"class":1074},[1053,6735,1309],{"class":1308},[1053,6737,1216],{"class":1074},[1053,6739,6740,6742,6744,6746,6748,6750],{"class":1055,"line":1431},[1053,6741,1241],{"class":1222},[1053,6743,1195],{"class":1074},[1053,6745,1247],{"class":1246},[1053,6747,5951],{"class":1250},[1053,6749,1247],{"class":1246},[1053,6751,1216],{"class":1074},[1053,6753,6754,6757,6759,6761,6764],{"class":1055,"line":1457},[1053,6755,6756],{"class":1222},"        help_text",[1053,6758,1195],{"class":1074},[1053,6760,1247],{"class":1246},[1053,6762,6763],{"class":1250},"Select relevant tags",[1053,6765,1254],{"class":1246},[1053,6767,6768],{"class":1055,"line":1462},[1053,6769,1260],{"class":1074},[1053,6771,6772],{"class":1055,"line":1468},[1053,6773,1186],{"class":1070},[1053,6775,6776,6778,6780,6782,6784,6786,6788,6790,6792,6794],{"class":1055,"line":1501},[1053,6777,1595],{"class":1070},[1053,6779,1195],{"class":1074},[1053,6781,1198],{"class":1070},[1053,6783,1075],{"class":1074},[1053,6785,1604],{"class":1203},[1053,6787,1154],{"class":1074},[1053,6789,1609],{"class":1222},[1053,6791,1195],{"class":1074},[1053,6793,1309],{"class":1308},[1053,6795,1312],{"class":1074},[1053,6797,6798],{"class":1055,"line":1525},[1053,6799,1186],{"class":1070},[1053,6801,6802,6804,6806,6808,6810],{"class":1055,"line":1530},[1053,6803,1651],{"class":1146},[1053,6805,1655],{"class":1654},[1053,6807,1154],{"class":1074},[1053,6809,1661],{"class":1660},[1053,6811,1166],{"class":1074},[1053,6813,6814,6816,6818,6820],{"class":1055,"line":1536},[1053,6815,1669],{"class":1066},[1053,6817,1737],{"class":1682},[1053,6819,1075],{"class":1074},[1053,6821,4540],{"class":1687},[1053,6823,6824],{"class":1055,"line":1562},[1053,6825,1186],{"class":1070},[1053,6827,6828,6830,6833,6835,6837],{"class":1055,"line":1587},[1053,6829,1651],{"class":1146},[1053,6831,6832],{"class":1722}," get_tag_names",[1053,6834,1154],{"class":1074},[1053,6836,1661],{"class":1660},[1053,6838,1166],{"class":1074},[1053,6840,6841,6843,6846],{"class":1055,"line":1592},[1053,6842,3724],{"class":1172},[1053,6844,6845],{"class":1176},"Get comma-separated list of tag names",[1053,6847,1180],{"class":1172},[1053,6849,6850,6852,6854,6857,6859,6861,6864,6866,6869,6871,6873,6876,6879,6881,6883,6885,6888,6890,6892],{"class":1055,"line":1618},[1053,6851,1669],{"class":1066},[1053,6853,2175],{"class":1246},[1053,6855,6856],{"class":1250},", ",[1053,6858,1247],{"class":1246},[1053,6860,1075],{"class":1074},[1053,6862,6863],{"class":1203},"join",[1053,6865,1154],{"class":1074},[1053,6867,6868],{"class":1203},"tag",[1053,6870,1075],{"class":1074},[1053,6872,3632],{"class":1687},[1053,6874,6875],{"class":1066}," for",[1053,6877,6878],{"class":1203}," tag ",[1053,6880,3846],{"class":1066},[1053,6882,1737],{"class":1682},[1053,6884,1075],{"class":1074},[1053,6886,6887],{"class":1687},"tags",[1053,6889,1075],{"class":1074},[1053,6891,3857],{"class":1203},[1053,6893,3897],{"class":1074},[1053,6895,6896],{"class":1055,"line":1643},[1053,6897,1140],{"emptyLinePlaceholder":1139},[1053,6899,6900],{"class":1055,"line":1648},[1053,6901,2209],{"class":1059},[1053,6903,6904],{"class":1055,"line":1666},[1053,6905,6906],{"class":1059},"# Add tags to an article\n",[1053,6908,6909],{"class":1055,"line":1702},[1053,6910,6911],{"class":1059},"# article = Article.objects.get(id=1)\n",[1053,6913,6914],{"class":1055,"line":1707},[1053,6915,6916],{"class":1059},"# tag1 = Tag.objects.get(name='Django')\n",[1053,6918,6919],{"class":1055,"line":1717},[1053,6920,6921],{"class":1059},"# tag2 = Tag.objects.get(name='Python')\n",[1053,6923,6924],{"class":1055,"line":1732},[1053,6925,6926],{"class":1059},"# article.tags.add(tag1, tag2)\n",[1053,6928,6929],{"class":1055,"line":1767},[1053,6930,1140],{"emptyLinePlaceholder":1139},[1053,6932,6933],{"class":1055,"line":1772},[1053,6934,6935],{"class":1059},"# Remove tags\n",[1053,6937,6938],{"class":1055,"line":1779},[1053,6939,6940],{"class":1059},"# article.tags.remove(tag1)\n",[1053,6942,6943],{"class":1055,"line":1793},[1053,6944,1140],{"emptyLinePlaceholder":1139},[1053,6946,6947],{"class":1055,"line":1809},[1053,6948,6949],{"class":1059},"# Set tags (replaces all existing tags)\n",[1053,6951,6952],{"class":1055,"line":1827},[1053,6953,6954],{"class":1059},"# article.tags.set([tag1, tag2])\n",[1053,6956,6957],{"class":1055,"line":1852},[1053,6958,1140],{"emptyLinePlaceholder":1139},[1053,6960,6961],{"class":1055,"line":1884},[1053,6962,6963],{"class":1059},"# Get all articles with a specific tag\n",[1053,6965,6966],{"class":1055,"line":1940},[1053,6967,6968],{"class":1059},"# django_articles = Tag.objects.get(name='Django').articles.all()\n",[1053,6970,6971],{"class":1055,"line":1946},[1053,6972,1140],{"emptyLinePlaceholder":1139},[1053,6974,6975],{"class":1055,"line":1954},[1053,6976,6977],{"class":1059},"# Get articles with multiple tags\n",[1053,6979,6980],{"class":1055,"line":1959},[1053,6981,6982],{"class":1059},"# articles_with_both_tags = Article.objects.filter(\n",[1053,6984,6985],{"class":1055,"line":1965},[1053,6986,6987],{"class":1059},"#     tags__name='Django'\n",[1053,6989,6990],{"class":1055,"line":1991},[1053,6991,6992],{"class":1059},"# ).filter(tags__name='Python')\n",[1038,6994,6996],{"id":6995},"many-to-many-with-through-model","Many-to-Many with Through Model",[1043,6998,7000],{"className":1045,"code":6999,"language":1047,"meta":1048,"style":1048},"# models.py\nfrom django.db import models\nfrom django.contrib.auth.models import User\n\nclass Project(models.Model):\n    name = models.CharField(max_length=200)\n    description = models.TextField()\n    start_date = models.DateField()\n    end_date = models.DateField(null=True, blank=True)\n    \n    def __str__(self):\n        return self.name\n\nclass Skill(models.Model):\n    name = models.CharField(max_length=100, unique=True)\n    category = models.CharField(max_length=50)\n    \n    def __str__(self):\n        return self.name\n\nclass Person(models.Model):\n    user = models.OneToOneField(User, on_delete=models.CASCADE)\n    bio = models.TextField(blank=True)\n    \n    # Many-to-many with through model\n    projects = models.ManyToManyField(\n        Project,\n        through='ProjectMembership',\n        related_name='members'\n    )\n    \n    skills = models.ManyToManyField(\n        Skill,\n        through='PersonSkill',\n        related_name='people'\n    )\n    \n    def __str__(self):\n        return self.user.get_full_name() or self.user.username\n\nclass ProjectMembership(models.Model):\n    \"\"\"Through model for Person-Project relationship\"\"\"\n    \n    ROLE_CHOICES = [\n        ('manager', 'Project Manager'),\n        ('developer', 'Developer'),\n        ('designer', 'Designer'),\n        ('tester', 'Tester'),\n        ('analyst', 'Business Analyst'),\n    ]\n    \n    person = models.ForeignKey(Person, on_delete=models.CASCADE)\n    project = models.ForeignKey(Project, on_delete=models.CASCADE)\n    \n    role = models.CharField(max_length=20, choices=ROLE_CHOICES)\n    start_date = models.DateField()\n    end_date = models.DateField(null=True, blank=True)\n    hours_per_week = models.PositiveSmallIntegerField(default=40)\n    is_active = models.BooleanField(default=True)\n    \n    class Meta:\n        unique_together = [['person', 'project', 'role']]\n        ordering = ['start_date']\n    \n    def __str__(self):\n        return f'{self.person} - {self.project} ({self.role})'\n    \n    @property\n    def is_current(self):\n        from django.utils import timezone\n        today = timezone.now().date()\n        return (\n            self.is_active and\n            self.start_date \u003C= today and\n            (self.end_date is None or self.end_date >= today)\n        )\n\nclass PersonSkill(models.Model):\n    \"\"\"Through model for Person-Skill relationship\"\"\"\n    \n    PROFICIENCY_CHOICES = [\n        (1, 'Beginner'),\n        (2, 'Intermediate'),\n        (3, 'Advanced'),\n        (4, 'Expert'),\n    ]\n    \n    person = models.ForeignKey(Person, on_delete=models.CASCADE)\n    skill = models.ForeignKey(Skill, on_delete=models.CASCADE)\n    \n    proficiency_level = models.PositiveSmallIntegerField(choices=PROFICIENCY_CHOICES)\n    years_of_experience = models.PositiveSmallIntegerField(default=0)\n    is_certified = models.BooleanField(default=False)\n    acquired_date = models.DateField()\n    \n    class Meta:\n        unique_together = [['person', 'skill']]\n    \n    def __str__(self):\n        return f'{self.person} - {self.skill} ({self.get_proficiency_level_display()})'\n\n# Usage with through models:\n# Create membership\n# membership = ProjectMembership.objects.create(\n#     person=person,\n#     project=project,\n#     role='developer',\n#     start_date='2023-01-01',\n#     hours_per_week=40\n# )\n\n# Query through the relationship\n# current_memberships = ProjectMembership.objects.filter(\n#     person=person,\n#     is_active=True\n# )\n\n# Get all developers on a project\n# developers = ProjectMembership.objects.filter(\n#     project=project,\n#     role='developer',\n#     is_active=True\n# )\n",[1050,7001,7002,7006,7020,7042,7046,7063,7085,7099,7114,7145,7149,7161,7171,7175,7192,7222,7244,7248,7260,7270,7274,7291,7321,7343,7347,7352,7367,7374,7390,7403,7407,7411,7426,7433,7448,7461,7465,7469,7481,7509,7513,7530,7539,7543,7552,7574,7596,7618,7640,7662,7666,7670,7702,7734,7738,7770,7784,7814,7839,7862,7866,7874,7912,7929,7933,7945,7991,7995,8001,8014,8029,8048,8054,8066,8083,8115,8120,8124,8141,8150,8154,8163,8180,8197,8215,8233,8237,8241,8271,8303,8307,8332,8356,8379,8394,8398,8406,8431,8435,8447,8494,8498,8503,8508,8513,8518,8523,8528,8533,8538,8543,8547,8552,8557,8561,8566,8570,8574,8579,8584,8588,8592,8596],{"__ignoreMap":1048},[1053,7003,7004],{"class":1055,"line":1056},[1053,7005,1060],{"class":1059},[1053,7007,7008,7010,7012,7014,7016,7018],{"class":1055,"line":1063},[1053,7009,1067],{"class":1066},[1053,7011,1071],{"class":1070},[1053,7013,1075],{"class":1074},[1053,7015,1078],{"class":1070},[1053,7017,1081],{"class":1066},[1053,7019,1084],{"class":1070},[1053,7021,7022,7024,7026,7028,7030,7032,7034,7036,7038,7040],{"class":1055,"line":1087},[1053,7023,1067],{"class":1066},[1053,7025,1071],{"class":1070},[1053,7027,1075],{"class":1074},[1053,7029,1096],{"class":1070},[1053,7031,1075],{"class":1074},[1053,7033,1101],{"class":1070},[1053,7035,1075],{"class":1074},[1053,7037,1106],{"class":1070},[1053,7039,1081],{"class":1066},[1053,7041,1111],{"class":1070},[1053,7043,7044],{"class":1055,"line":1114},[1053,7045,1140],{"emptyLinePlaceholder":1139},[1053,7047,7048,7050,7053,7055,7057,7059,7061],{"class":1055,"line":1136},[1053,7049,1147],{"class":1146},[1053,7051,7052],{"class":1150}," Project",[1053,7054,1154],{"class":1074},[1053,7056,1158],{"class":1157},[1053,7058,1075],{"class":1074},[1053,7060,1163],{"class":1157},[1053,7062,1166],{"class":1074},[1053,7064,7065,7067,7069,7071,7073,7075,7077,7079,7081,7083],{"class":1055,"line":1143},[1053,7066,2280],{"class":1070},[1053,7068,1195],{"class":1074},[1053,7070,1198],{"class":1070},[1053,7072,1075],{"class":1074},[1053,7074,1409],{"class":1203},[1053,7076,1154],{"class":1074},[1053,7078,1291],{"class":1222},[1053,7080,1195],{"class":1074},[1053,7082,2297],{"class":1296},[1053,7084,1312],{"class":1074},[1053,7086,7087,7089,7091,7093,7095,7097],{"class":1055,"line":1169},[1053,7088,3489],{"class":1070},[1053,7090,1195],{"class":1074},[1053,7092,1198],{"class":1070},[1053,7094,1075],{"class":1074},[1053,7096,1286],{"class":1203},[1053,7098,1849],{"class":1074},[1053,7100,7101,7104,7106,7108,7110,7112],{"class":1055,"line":1183},[1053,7102,7103],{"class":1070},"    start_date ",[1053,7105,1195],{"class":1074},[1053,7107,1198],{"class":1070},[1053,7109,1075],{"class":1074},[1053,7111,1327],{"class":1203},[1053,7113,1849],{"class":1074},[1053,7115,7116,7119,7121,7123,7125,7127,7129,7131,7133,7135,7137,7139,7141,7143],{"class":1055,"line":1189},[1053,7117,7118],{"class":1070},"    end_date ",[1053,7120,1195],{"class":1074},[1053,7122,1198],{"class":1070},[1053,7124,1075],{"class":1074},[1053,7126,1327],{"class":1203},[1053,7128,1154],{"class":1074},[1053,7130,1332],{"class":1222},[1053,7132,1195],{"class":1074},[1053,7134,1309],{"class":1308},[1053,7136,1300],{"class":1074},[1053,7138,1303],{"class":1222},[1053,7140,1195],{"class":1074},[1053,7142,1309],{"class":1308},[1053,7144,1312],{"class":1074},[1053,7146,7147],{"class":1055,"line":1210},[1053,7148,1186],{"class":1070},[1053,7150,7151,7153,7155,7157,7159],{"class":1055,"line":1219},[1053,7152,1651],{"class":1146},[1053,7154,1655],{"class":1654},[1053,7156,1154],{"class":1074},[1053,7158,1661],{"class":1660},[1053,7160,1166],{"class":1074},[1053,7162,7163,7165,7167,7169],{"class":1055,"line":1238},[1053,7164,1669],{"class":1066},[1053,7166,1737],{"class":1682},[1053,7168,1075],{"class":1074},[1053,7170,2341],{"class":1687},[1053,7172,7173],{"class":1055,"line":1257},[1053,7174,1140],{"emptyLinePlaceholder":1139},[1053,7176,7177,7179,7182,7184,7186,7188,7190],{"class":1055,"line":1263},[1053,7178,1147],{"class":1146},[1053,7180,7181],{"class":1150}," Skill",[1053,7183,1154],{"class":1074},[1053,7185,1158],{"class":1157},[1053,7187,1075],{"class":1074},[1053,7189,1163],{"class":1157},[1053,7191,1166],{"class":1074},[1053,7193,7194,7196,7198,7200,7202,7204,7206,7208,7210,7212,7214,7216,7218,7220],{"class":1055,"line":1268},[1053,7195,2280],{"class":1070},[1053,7197,1195],{"class":1074},[1053,7199,1198],{"class":1070},[1053,7201,1075],{"class":1074},[1053,7203,1409],{"class":1203},[1053,7205,1154],{"class":1074},[1053,7207,1291],{"class":1222},[1053,7209,1195],{"class":1074},[1053,7211,3106],{"class":1296},[1053,7213,1300],{"class":1074},[1053,7215,2646],{"class":1222},[1053,7217,1195],{"class":1074},[1053,7219,1309],{"class":1308},[1053,7221,1312],{"class":1074},[1053,7223,7224,7226,7228,7230,7232,7234,7236,7238,7240,7242],{"class":1055,"line":1274},[1053,7225,4143],{"class":1070},[1053,7227,1195],{"class":1074},[1053,7229,1198],{"class":1070},[1053,7231,1075],{"class":1074},[1053,7233,1409],{"class":1203},[1053,7235,1154],{"class":1074},[1053,7237,1291],{"class":1222},[1053,7239,1195],{"class":1074},[1053,7241,1488],{"class":1296},[1053,7243,1312],{"class":1074},[1053,7245,7246],{"class":1055,"line":1315},[1053,7247,1186],{"class":1070},[1053,7249,7250,7252,7254,7256,7258],{"class":1055,"line":1349},[1053,7251,1651],{"class":1146},[1053,7253,1655],{"class":1654},[1053,7255,1154],{"class":1074},[1053,7257,1661],{"class":1660},[1053,7259,1166],{"class":1074},[1053,7261,7262,7264,7266,7268],{"class":1055,"line":1397},[1053,7263,1669],{"class":1066},[1053,7265,1737],{"class":1682},[1053,7267,1075],{"class":1074},[1053,7269,2341],{"class":1687},[1053,7271,7272],{"class":1055,"line":1431},[1053,7273,1140],{"emptyLinePlaceholder":1139},[1053,7275,7276,7278,7281,7283,7285,7287,7289],{"class":1055,"line":1457},[1053,7277,1147],{"class":1146},[1053,7279,7280],{"class":1150}," Person",[1053,7282,1154],{"class":1074},[1053,7284,1158],{"class":1157},[1053,7286,1075],{"class":1074},[1053,7288,1163],{"class":1157},[1053,7290,1166],{"class":1074},[1053,7292,7293,7295,7297,7299,7301,7303,7305,7307,7309,7311,7313,7315,7317,7319],{"class":1055,"line":1462},[1053,7294,1192],{"class":1070},[1053,7296,1195],{"class":1074},[1053,7298,1198],{"class":1070},[1053,7300,1075],{"class":1074},[1053,7302,1204],{"class":1203},[1053,7304,1154],{"class":1074},[1053,7306,2034],{"class":1203},[1053,7308,1300],{"class":1074},[1053,7310,2811],{"class":1222},[1053,7312,1195],{"class":1074},[1053,7314,1158],{"class":1203},[1053,7316,1075],{"class":1074},[1053,7318,1233],{"class":1232},[1053,7320,1312],{"class":1074},[1053,7322,7323,7325,7327,7329,7331,7333,7335,7337,7339,7341],{"class":1055,"line":1468},[1053,7324,1277],{"class":1070},[1053,7326,1195],{"class":1074},[1053,7328,1198],{"class":1070},[1053,7330,1075],{"class":1074},[1053,7332,1286],{"class":1203},[1053,7334,1154],{"class":1074},[1053,7336,1448],{"class":1222},[1053,7338,1195],{"class":1074},[1053,7340,1309],{"class":1308},[1053,7342,1312],{"class":1074},[1053,7344,7345],{"class":1055,"line":1501},[1053,7346,1186],{"class":1070},[1053,7348,7349],{"class":1055,"line":1525},[1053,7350,7351],{"class":1059},"    # Many-to-many with through model\n",[1053,7353,7354,7357,7359,7361,7363,7365],{"class":1055,"line":1530},[1053,7355,7356],{"class":1070},"    projects ",[1053,7358,1195],{"class":1074},[1053,7360,1198],{"class":1070},[1053,7362,1075],{"class":1074},[1053,7364,6718],{"class":1203},[1053,7366,1207],{"class":1074},[1053,7368,7369,7372],{"class":1055,"line":1536},[1053,7370,7371],{"class":1203},"        Project",[1053,7373,1216],{"class":1074},[1053,7375,7376,7379,7381,7383,7386,7388],{"class":1055,"line":1562},[1053,7377,7378],{"class":1222},"        through",[1053,7380,1195],{"class":1074},[1053,7382,1247],{"class":1246},[1053,7384,7385],{"class":1250},"ProjectMembership",[1053,7387,1247],{"class":1246},[1053,7389,1216],{"class":1074},[1053,7391,7392,7394,7396,7398,7401],{"class":1055,"line":1587},[1053,7393,1241],{"class":1222},[1053,7395,1195],{"class":1074},[1053,7397,1247],{"class":1246},[1053,7399,7400],{"class":1250},"members",[1053,7402,1254],{"class":1246},[1053,7404,7405],{"class":1055,"line":1592},[1053,7406,1260],{"class":1074},[1053,7408,7409],{"class":1055,"line":1618},[1053,7410,1186],{"class":1070},[1053,7412,7413,7416,7418,7420,7422,7424],{"class":1055,"line":1643},[1053,7414,7415],{"class":1070},"    skills ",[1053,7417,1195],{"class":1074},[1053,7419,1198],{"class":1070},[1053,7421,1075],{"class":1074},[1053,7423,6718],{"class":1203},[1053,7425,1207],{"class":1074},[1053,7427,7428,7431],{"class":1055,"line":1648},[1053,7429,7430],{"class":1203},"        Skill",[1053,7432,1216],{"class":1074},[1053,7434,7435,7437,7439,7441,7444,7446],{"class":1055,"line":1666},[1053,7436,7378],{"class":1222},[1053,7438,1195],{"class":1074},[1053,7440,1247],{"class":1246},[1053,7442,7443],{"class":1250},"PersonSkill",[1053,7445,1247],{"class":1246},[1053,7447,1216],{"class":1074},[1053,7449,7450,7452,7454,7456,7459],{"class":1055,"line":1702},[1053,7451,1241],{"class":1222},[1053,7453,1195],{"class":1074},[1053,7455,1247],{"class":1246},[1053,7457,7458],{"class":1250},"people",[1053,7460,1254],{"class":1246},[1053,7462,7463],{"class":1055,"line":1707},[1053,7464,1260],{"class":1074},[1053,7466,7467],{"class":1055,"line":1717},[1053,7468,1186],{"class":1070},[1053,7470,7471,7473,7475,7477,7479],{"class":1055,"line":1732},[1053,7472,1651],{"class":1146},[1053,7474,1655],{"class":1654},[1053,7476,1154],{"class":1074},[1053,7478,1661],{"class":1660},[1053,7480,1166],{"class":1074},[1053,7482,7483,7485,7487,7489,7491,7493,7495,7497,7499,7501,7503,7505,7507],{"class":1055,"line":1767},[1053,7484,1669],{"class":1066},[1053,7486,1737],{"class":1682},[1053,7488,1075],{"class":1074},[1053,7490,1688],{"class":1687},[1053,7492,1075],{"class":1074},[1053,7494,1746],{"class":1203},[1053,7496,1749],{"class":1074},[1053,7498,1753],{"class":1752},[1053,7500,1737],{"class":1682},[1053,7502,1075],{"class":1074},[1053,7504,1688],{"class":1687},[1053,7506,1075],{"class":1074},[1053,7508,1764],{"class":1687},[1053,7510,7511],{"class":1055,"line":1772},[1053,7512,1140],{"emptyLinePlaceholder":1139},[1053,7514,7515,7517,7520,7522,7524,7526,7528],{"class":1055,"line":1779},[1053,7516,1147],{"class":1146},[1053,7518,7519],{"class":1150}," ProjectMembership",[1053,7521,1154],{"class":1074},[1053,7523,1158],{"class":1157},[1053,7525,1075],{"class":1074},[1053,7527,1163],{"class":1157},[1053,7529,1166],{"class":1074},[1053,7531,7532,7534,7537],{"class":1055,"line":1793},[1053,7533,1173],{"class":1172},[1053,7535,7536],{"class":1176},"Through model for Person-Project relationship",[1053,7538,1180],{"class":1172},[1053,7540,7541],{"class":1055,"line":1809},[1053,7542,1186],{"class":1070},[1053,7544,7545,7548,7550],{"class":1055,"line":1827},[1053,7546,7547],{"class":1682},"    ROLE_CHOICES",[1053,7549,2728],{"class":1074},[1053,7551,3935],{"class":1074},[1053,7553,7554,7556,7558,7561,7563,7565,7567,7570,7572],{"class":1055,"line":1852},[1053,7555,3940],{"class":1074},[1053,7557,1247],{"class":1246},[1053,7559,7560],{"class":1250},"manager",[1053,7562,1247],{"class":1246},[1053,7564,1300],{"class":1074},[1053,7566,2175],{"class":1246},[1053,7568,7569],{"class":1250},"Project Manager",[1053,7571,1247],{"class":1246},[1053,7573,3959],{"class":1074},[1053,7575,7576,7578,7580,7583,7585,7587,7589,7592,7594],{"class":1055,"line":1884},[1053,7577,3940],{"class":1074},[1053,7579,1247],{"class":1246},[1053,7581,7582],{"class":1250},"developer",[1053,7584,1247],{"class":1246},[1053,7586,1300],{"class":1074},[1053,7588,2175],{"class":1246},[1053,7590,7591],{"class":1250},"Developer",[1053,7593,1247],{"class":1246},[1053,7595,3959],{"class":1074},[1053,7597,7598,7600,7602,7605,7607,7609,7611,7614,7616],{"class":1055,"line":1940},[1053,7599,3940],{"class":1074},[1053,7601,1247],{"class":1246},[1053,7603,7604],{"class":1250},"designer",[1053,7606,1247],{"class":1246},[1053,7608,1300],{"class":1074},[1053,7610,2175],{"class":1246},[1053,7612,7613],{"class":1250},"Designer",[1053,7615,1247],{"class":1246},[1053,7617,3959],{"class":1074},[1053,7619,7620,7622,7624,7627,7629,7631,7633,7636,7638],{"class":1055,"line":1946},[1053,7621,3940],{"class":1074},[1053,7623,1247],{"class":1246},[1053,7625,7626],{"class":1250},"tester",[1053,7628,1247],{"class":1246},[1053,7630,1300],{"class":1074},[1053,7632,2175],{"class":1246},[1053,7634,7635],{"class":1250},"Tester",[1053,7637,1247],{"class":1246},[1053,7639,3959],{"class":1074},[1053,7641,7642,7644,7646,7649,7651,7653,7655,7658,7660],{"class":1055,"line":1954},[1053,7643,3940],{"class":1074},[1053,7645,1247],{"class":1246},[1053,7647,7648],{"class":1250},"analyst",[1053,7650,1247],{"class":1246},[1053,7652,1300],{"class":1074},[1053,7654,2175],{"class":1246},[1053,7656,7657],{"class":1250},"Business Analyst",[1053,7659,1247],{"class":1246},[1053,7661,3959],{"class":1074},[1053,7663,7664],{"class":1055,"line":1959},[1053,7665,4008],{"class":1074},[1053,7667,7668],{"class":1055,"line":1965},[1053,7669,1186],{"class":1070},[1053,7671,7672,7675,7677,7679,7681,7683,7685,7688,7690,7692,7694,7696,7698,7700],{"class":1055,"line":1991},[1053,7673,7674],{"class":1070},"    person ",[1053,7676,1195],{"class":1074},[1053,7678,1198],{"class":1070},[1053,7680,1075],{"class":1074},[1053,7682,2801],{"class":1203},[1053,7684,1154],{"class":1074},[1053,7686,7687],{"class":1203},"Person",[1053,7689,1300],{"class":1074},[1053,7691,2811],{"class":1222},[1053,7693,1195],{"class":1074},[1053,7695,1158],{"class":1203},[1053,7697,1075],{"class":1074},[1053,7699,1233],{"class":1232},[1053,7701,1312],{"class":1074},[1053,7703,7704,7707,7709,7711,7713,7715,7717,7720,7722,7724,7726,7728,7730,7732],{"class":1055,"line":2008},[1053,7705,7706],{"class":1070},"    project ",[1053,7708,1195],{"class":1074},[1053,7710,1198],{"class":1070},[1053,7712,1075],{"class":1074},[1053,7714,2801],{"class":1203},[1053,7716,1154],{"class":1074},[1053,7718,7719],{"class":1203},"Project",[1053,7721,1300],{"class":1074},[1053,7723,2811],{"class":1222},[1053,7725,1195],{"class":1074},[1053,7727,1158],{"class":1203},[1053,7729,1075],{"class":1074},[1053,7731,1233],{"class":1232},[1053,7733,1312],{"class":1074},[1053,7735,7736],{"class":1055,"line":2013},[1053,7737,1186],{"class":1070},[1053,7739,7740,7743,7745,7747,7749,7751,7753,7755,7757,7759,7761,7763,7765,7768],{"class":1055,"line":2039},[1053,7741,7742],{"class":1070},"    role ",[1053,7744,1195],{"class":1074},[1053,7746,1198],{"class":1070},[1053,7748,1075],{"class":1074},[1053,7750,1409],{"class":1203},[1053,7752,1154],{"class":1074},[1053,7754,1291],{"class":1222},[1053,7756,1195],{"class":1074},[1053,7758,1418],{"class":1296},[1053,7760,1300],{"class":1074},[1053,7762,4259],{"class":1222},[1053,7764,1195],{"class":1074},[1053,7766,7767],{"class":4264},"ROLE_CHOICES",[1053,7769,1312],{"class":1074},[1053,7771,7772,7774,7776,7778,7780,7782],{"class":1055,"line":2074},[1053,7773,7103],{"class":1070},[1053,7775,1195],{"class":1074},[1053,7777,1198],{"class":1070},[1053,7779,1075],{"class":1074},[1053,7781,1327],{"class":1203},[1053,7783,1849],{"class":1074},[1053,7785,7786,7788,7790,7792,7794,7796,7798,7800,7802,7804,7806,7808,7810,7812],{"class":1055,"line":2084},[1053,7787,7118],{"class":1070},[1053,7789,1195],{"class":1074},[1053,7791,1198],{"class":1070},[1053,7793,1075],{"class":1074},[1053,7795,1327],{"class":1203},[1053,7797,1154],{"class":1074},[1053,7799,1332],{"class":1222},[1053,7801,1195],{"class":1074},[1053,7803,1309],{"class":1308},[1053,7805,1300],{"class":1074},[1053,7807,1303],{"class":1222},[1053,7809,1195],{"class":1074},[1053,7811,1309],{"class":1308},[1053,7813,1312],{"class":1074},[1053,7815,7816,7819,7821,7823,7825,7828,7830,7832,7834,7837],{"class":1055,"line":2111},[1053,7817,7818],{"class":1070},"    hours_per_week ",[1053,7820,1195],{"class":1074},[1053,7822,1198],{"class":1070},[1053,7824,1075],{"class":1074},[1053,7826,7827],{"class":1203},"PositiveSmallIntegerField",[1053,7829,1154],{"class":1074},[1053,7831,1553],{"class":1222},[1053,7833,1195],{"class":1074},[1053,7835,7836],{"class":1296},"40",[1053,7838,1312],{"class":1074},[1053,7840,7841,7844,7846,7848,7850,7852,7854,7856,7858,7860],{"class":1055,"line":2116},[1053,7842,7843],{"class":1070},"    is_active ",[1053,7845,1195],{"class":1074},[1053,7847,1198],{"class":1070},[1053,7849,1075],{"class":1074},[1053,7851,1548],{"class":1203},[1053,7853,1154],{"class":1074},[1053,7855,1553],{"class":1222},[1053,7857,1195],{"class":1074},[1053,7859,1309],{"class":1308},[1053,7861,1312],{"class":1074},[1053,7863,7864],{"class":1055,"line":2137},[1053,7865,1186],{"class":1070},[1053,7867,7868,7870,7872],{"class":1055,"line":2161},[1053,7869,3598],{"class":1146},[1053,7871,3601],{"class":1150},[1053,7873,1806],{"class":1074},[1053,7875,7876,7879,7881,7884,7886,7889,7891,7893,7895,7898,7900,7902,7904,7907,7909],{"class":1055,"line":2184},[1053,7877,7878],{"class":1070},"        unique_together ",[1053,7880,1195],{"class":1074},[1053,7882,7883],{"class":1074}," [[",[1053,7885,1247],{"class":1246},[1053,7887,7888],{"class":1250},"person",[1053,7890,1247],{"class":1246},[1053,7892,1300],{"class":1074},[1053,7894,2175],{"class":1246},[1053,7896,7897],{"class":1250},"project",[1053,7899,1247],{"class":1246},[1053,7901,1300],{"class":1074},[1053,7903,2175],{"class":1246},[1053,7905,7906],{"class":1250},"role",[1053,7908,1247],{"class":1246},[1053,7910,7911],{"class":1074},"]]\n",[1053,7913,7914,7916,7918,7920,7922,7925,7927],{"class":1055,"line":2201},[1053,7915,3622],{"class":1070},[1053,7917,1195],{"class":1074},[1053,7919,3627],{"class":1074},[1053,7921,1247],{"class":1246},[1053,7923,7924],{"class":1250},"start_date",[1053,7926,1247],{"class":1246},[1053,7928,3637],{"class":1074},[1053,7930,7931],{"class":1055,"line":2206},[1053,7932,1186],{"class":1070},[1053,7934,7935,7937,7939,7941,7943],{"class":1055,"line":2212},[1053,7936,1651],{"class":1146},[1053,7938,1655],{"class":1654},[1053,7940,1154],{"class":1074},[1053,7942,1661],{"class":1660},[1053,7944,1166],{"class":1074},[1053,7946,7947,7949,7951,7953,7955,7957,7959,7961,7963,7966,7968,7970,7972,7974,7976,7978,7980,7982,7984,7986,7988],{"class":1055,"line":2218},[1053,7948,1669],{"class":1066},[1053,7950,1672],{"class":1146},[1053,7952,1247],{"class":1250},[1053,7954,1679],{"class":1678},[1053,7956,1661],{"class":1682},[1053,7958,1075],{"class":1074},[1053,7960,7888],{"class":1687},[1053,7962,1696],{"class":1678},[1053,7964,7965],{"class":1250}," - ",[1053,7967,1679],{"class":1678},[1053,7969,1661],{"class":1682},[1053,7971,1075],{"class":1074},[1053,7973,7897],{"class":1687},[1053,7975,1696],{"class":1678},[1053,7977,1913],{"class":1250},[1053,7979,1679],{"class":1678},[1053,7981,1661],{"class":1682},[1053,7983,1075],{"class":1074},[1053,7985,7906],{"class":1687},[1053,7987,1696],{"class":1678},[1053,7989,7990],{"class":1250},")'\n",[1053,7992,7993],{"class":1055,"line":2224},[1053,7994,1186],{"class":1070},[1053,7996,7997,7999],{"class":1055,"line":3229},[1053,7998,1710],{"class":1074},[1053,8000,1714],{"class":1713},[1053,8002,8003,8005,8008,8010,8012],{"class":1055,"line":3235},[1053,8004,1651],{"class":1146},[1053,8006,8007],{"class":1722}," is_current",[1053,8009,1154],{"class":1074},[1053,8011,1661],{"class":1660},[1053,8013,1166],{"class":1074},[1053,8015,8016,8019,8021,8023,8025,8027],{"class":1055,"line":3259},[1053,8017,8018],{"class":1066},"        from",[1053,8020,1071],{"class":1070},[1053,8022,1075],{"class":1074},[1053,8024,1819],{"class":1070},[1053,8026,1081],{"class":1066},[1053,8028,1824],{"class":1070},[1053,8030,8031,8034,8036,8038,8040,8042,8044,8046],{"class":1055,"line":3283},[1053,8032,8033],{"class":1070},"        today ",[1053,8035,1195],{"class":1074},[1053,8037,1835],{"class":1070},[1053,8039,1075],{"class":1074},[1053,8041,1840],{"class":1203},[1053,8043,1843],{"class":1074},[1053,8045,1846],{"class":1203},[1053,8047,1849],{"class":1074},[1053,8049,8050,8052],{"class":1055,"line":3307},[1053,8051,1669],{"class":1066},[1053,8053,1881],{"class":1074},[1053,8055,8056,8058,8060,8063],{"class":1055,"line":3312},[1053,8057,2721],{"class":1682},[1053,8059,1075],{"class":1074},[1053,8061,8062],{"class":1687},"is_active",[1053,8064,8065],{"class":1752}," and\n",[1053,8067,8068,8070,8072,8074,8077,8080],{"class":1055,"line":3325},[1053,8069,2721],{"class":1682},[1053,8071,1075],{"class":1074},[1053,8073,7924],{"class":1687},[1053,8075,8076],{"class":1752}," \u003C=",[1053,8078,8079],{"class":1070}," today ",[1053,8081,8082],{"class":1752},"and\n",[1053,8084,8085,8088,8090,8092,8095,8097,8100,8102,8104,8106,8108,8111,8113],{"class":1055,"line":4308},[1053,8086,8087],{"class":1074},"            (",[1053,8089,1661],{"class":1682},[1053,8091,1075],{"class":1074},[1053,8093,8094],{"class":1687},"end_date",[1053,8096,3700],{"class":1752},[1053,8098,8099],{"class":1308}," None",[1053,8101,1753],{"class":1752},[1053,8103,1737],{"class":1682},[1053,8105,1075],{"class":1074},[1053,8107,8094],{"class":1687},[1053,8109,8110],{"class":1752}," >=",[1053,8112,1858],{"class":1070},[1053,8114,1312],{"class":1074},[1053,8116,8117],{"class":1055,"line":4331},[1053,8118,8119],{"class":1074},"        )\n",[1053,8121,8122],{"class":1055,"line":4363},[1053,8123,1140],{"emptyLinePlaceholder":1139},[1053,8125,8126,8128,8131,8133,8135,8137,8139],{"class":1055,"line":4368},[1053,8127,1147],{"class":1146},[1053,8129,8130],{"class":1150}," PersonSkill",[1053,8132,1154],{"class":1074},[1053,8134,1158],{"class":1157},[1053,8136,1075],{"class":1074},[1053,8138,1163],{"class":1157},[1053,8140,1166],{"class":1074},[1053,8142,8143,8145,8148],{"class":1055,"line":4377},[1053,8144,1173],{"class":1172},[1053,8146,8147],{"class":1176},"Through model for Person-Skill relationship",[1053,8149,1180],{"class":1172},[1053,8151,8152],{"class":1055,"line":4395},[1053,8153,1186],{"class":1070},[1053,8155,8156,8159,8161],{"class":1055,"line":4405},[1053,8157,8158],{"class":1682},"    PROFICIENCY_CHOICES",[1053,8160,2728],{"class":1074},[1053,8162,3935],{"class":1074},[1053,8164,8165,8167,8169,8171,8173,8176,8178],{"class":1055,"line":4443},[1053,8166,3940],{"class":1074},[1053,8168,5653],{"class":1296},[1053,8170,1300],{"class":1074},[1053,8172,2175],{"class":1246},[1053,8174,8175],{"class":1250},"Beginner",[1053,8177,1247],{"class":1246},[1053,8179,3959],{"class":1074},[1053,8181,8182,8184,8186,8188,8190,8193,8195],{"class":1055,"line":4475},[1053,8183,3940],{"class":1074},[1053,8185,3165],{"class":1296},[1053,8187,1300],{"class":1074},[1053,8189,2175],{"class":1246},[1053,8191,8192],{"class":1250},"Intermediate",[1053,8194,1247],{"class":1246},[1053,8196,3959],{"class":1074},[1053,8198,8199,8201,8204,8206,8208,8211,8213],{"class":1055,"line":4507},[1053,8200,3940],{"class":1074},[1053,8202,8203],{"class":1296},"3",[1053,8205,1300],{"class":1074},[1053,8207,2175],{"class":1246},[1053,8209,8210],{"class":1250},"Advanced",[1053,8212,1247],{"class":1246},[1053,8214,3959],{"class":1074},[1053,8216,8217,8219,8222,8224,8226,8229,8231],{"class":1055,"line":4513},[1053,8218,3940],{"class":1074},[1053,8220,8221],{"class":1296},"4",[1053,8223,1300],{"class":1074},[1053,8225,2175],{"class":1246},[1053,8227,8228],{"class":1250},"Expert",[1053,8230,1247],{"class":1246},[1053,8232,3959],{"class":1074},[1053,8234,8235],{"class":1055,"line":4518},[1053,8236,4008],{"class":1074},[1053,8238,8239],{"class":1055,"line":4531},[1053,8240,1186],{"class":1070},[1053,8242,8243,8245,8247,8249,8251,8253,8255,8257,8259,8261,8263,8265,8267,8269],{"class":1055,"line":4543},[1053,8244,7674],{"class":1070},[1053,8246,1195],{"class":1074},[1053,8248,1198],{"class":1070},[1053,8250,1075],{"class":1074},[1053,8252,2801],{"class":1203},[1053,8254,1154],{"class":1074},[1053,8256,7687],{"class":1203},[1053,8258,1300],{"class":1074},[1053,8260,2811],{"class":1222},[1053,8262,1195],{"class":1074},[1053,8264,1158],{"class":1203},[1053,8266,1075],{"class":1074},[1053,8268,1233],{"class":1232},[1053,8270,1312],{"class":1074},[1053,8272,8273,8276,8278,8280,8282,8284,8286,8289,8291,8293,8295,8297,8299,8301],{"class":1055,"line":4548},[1053,8274,8275],{"class":1070},"    skill ",[1053,8277,1195],{"class":1074},[1053,8279,1198],{"class":1070},[1053,8281,1075],{"class":1074},[1053,8283,2801],{"class":1203},[1053,8285,1154],{"class":1074},[1053,8287,8288],{"class":1203},"Skill",[1053,8290,1300],{"class":1074},[1053,8292,2811],{"class":1222},[1053,8294,1195],{"class":1074},[1053,8296,1158],{"class":1203},[1053,8298,1075],{"class":1074},[1053,8300,1233],{"class":1232},[1053,8302,1312],{"class":1074},[1053,8304,8305],{"class":1055,"line":4566},[1053,8306,1186],{"class":1070},[1053,8308,8309,8312,8314,8316,8318,8320,8322,8325,8327,8330],{"class":1055,"line":4572},[1053,8310,8311],{"class":1070},"    proficiency_level ",[1053,8313,1195],{"class":1074},[1053,8315,1198],{"class":1070},[1053,8317,1075],{"class":1074},[1053,8319,7827],{"class":1203},[1053,8321,1154],{"class":1074},[1053,8323,8324],{"class":1222},"choices",[1053,8326,1195],{"class":1074},[1053,8328,8329],{"class":4264},"PROFICIENCY_CHOICES",[1053,8331,1312],{"class":1074},[1053,8333,8334,8337,8339,8341,8343,8345,8347,8349,8351,8354],{"class":1055,"line":4588},[1053,8335,8336],{"class":1070},"    years_of_experience ",[1053,8338,1195],{"class":1074},[1053,8340,1198],{"class":1070},[1053,8342,1075],{"class":1074},[1053,8344,7827],{"class":1203},[1053,8346,1154],{"class":1074},[1053,8348,1553],{"class":1222},[1053,8350,1195],{"class":1074},[1053,8352,8353],{"class":1296},"0",[1053,8355,1312],{"class":1074},[1053,8357,8358,8361,8363,8365,8367,8369,8371,8373,8375,8377],{"class":1055,"line":4596},[1053,8359,8360],{"class":1070},"    is_certified ",[1053,8362,1195],{"class":1074},[1053,8364,1198],{"class":1070},[1053,8366,1075],{"class":1074},[1053,8368,1548],{"class":1203},[1053,8370,1154],{"class":1074},[1053,8372,1553],{"class":1222},[1053,8374,1195],{"class":1074},[1053,8376,1582],{"class":1308},[1053,8378,1312],{"class":1074},[1053,8380,8381,8384,8386,8388,8390,8392],{"class":1055,"line":4611},[1053,8382,8383],{"class":1070},"    acquired_date ",[1053,8385,1195],{"class":1074},[1053,8387,1198],{"class":1070},[1053,8389,1075],{"class":1074},[1053,8391,1327],{"class":1203},[1053,8393,1849],{"class":1074},[1053,8395,8396],{"class":1055,"line":4625},[1053,8397,1186],{"class":1070},[1053,8399,8400,8402,8404],{"class":1055,"line":4630},[1053,8401,3598],{"class":1146},[1053,8403,3601],{"class":1150},[1053,8405,1806],{"class":1074},[1053,8407,8408,8410,8412,8414,8416,8418,8420,8422,8424,8427,8429],{"class":1055,"line":4635},[1053,8409,7878],{"class":1070},[1053,8411,1195],{"class":1074},[1053,8413,7883],{"class":1074},[1053,8415,1247],{"class":1246},[1053,8417,7888],{"class":1250},[1053,8419,1247],{"class":1246},[1053,8421,1300],{"class":1074},[1053,8423,2175],{"class":1246},[1053,8425,8426],{"class":1250},"skill",[1053,8428,1247],{"class":1246},[1053,8430,7911],{"class":1074},[1053,8432,8433],{"class":1055,"line":4641},[1053,8434,1186],{"class":1070},[1053,8436,8437,8439,8441,8443,8445],{"class":1055,"line":4656},[1053,8438,1651],{"class":1146},[1053,8440,1655],{"class":1654},[1053,8442,1154],{"class":1074},[1053,8444,1661],{"class":1660},[1053,8446,1166],{"class":1074},[1053,8448,8449,8451,8453,8455,8457,8459,8461,8463,8465,8467,8469,8471,8473,8475,8477,8479,8481,8483,8485,8488,8490,8492],{"class":1055,"line":4663},[1053,8450,1669],{"class":1066},[1053,8452,1672],{"class":1146},[1053,8454,1247],{"class":1250},[1053,8456,1679],{"class":1678},[1053,8458,1661],{"class":1682},[1053,8460,1075],{"class":1074},[1053,8462,7888],{"class":1687},[1053,8464,1696],{"class":1678},[1053,8466,7965],{"class":1250},[1053,8468,1679],{"class":1678},[1053,8470,1661],{"class":1682},[1053,8472,1075],{"class":1074},[1053,8474,8426],{"class":1687},[1053,8476,1696],{"class":1678},[1053,8478,1913],{"class":1250},[1053,8480,1679],{"class":1678},[1053,8482,1661],{"class":1682},[1053,8484,1075],{"class":1074},[1053,8486,8487],{"class":1203},"get_proficiency_level_display",[1053,8489,1749],{"class":1074},[1053,8491,1696],{"class":1678},[1053,8493,7990],{"class":1250},[1053,8495,8496],{"class":1055,"line":4678},[1053,8497,1140],{"emptyLinePlaceholder":1139},[1053,8499,8500],{"class":1055,"line":4691},[1053,8501,8502],{"class":1059},"# Usage with through models:\n",[1053,8504,8505],{"class":1055,"line":4696},[1053,8506,8507],{"class":1059},"# Create membership\n",[1053,8509,8510],{"class":1055,"line":4701},[1053,8511,8512],{"class":1059},"# membership = ProjectMembership.objects.create(\n",[1053,8514,8515],{"class":1055,"line":4707},[1053,8516,8517],{"class":1059},"#     person=person,\n",[1053,8519,8520],{"class":1055,"line":4722},[1053,8521,8522],{"class":1059},"#     project=project,\n",[1053,8524,8525],{"class":1055,"line":4733},[1053,8526,8527],{"class":1059},"#     role='developer',\n",[1053,8529,8530],{"class":1055,"line":4748},[1053,8531,8532],{"class":1059},"#     start_date='2023-01-01',\n",[1053,8534,8535],{"class":1055,"line":4759},[1053,8536,8537],{"class":1059},"#     hours_per_week=40\n",[1053,8539,8540],{"class":1055,"line":4770},[1053,8541,8542],{"class":1059},"# )\n",[1053,8544,8545],{"class":1055,"line":4784},[1053,8546,1140],{"emptyLinePlaceholder":1139},[1053,8548,8549],{"class":1055,"line":4789},[1053,8550,8551],{"class":1059},"# Query through the relationship\n",[1053,8553,8554],{"class":1055,"line":4794},[1053,8555,8556],{"class":1059},"# current_memberships = ProjectMembership.objects.filter(\n",[1053,8558,8559],{"class":1055,"line":4809},[1053,8560,8517],{"class":1059},[1053,8562,8563],{"class":1055,"line":4833},[1053,8564,8565],{"class":1059},"#     is_active=True\n",[1053,8567,8568],{"class":1055,"line":4856},[1053,8569,8542],{"class":1059},[1053,8571,8572],{"class":1055,"line":4861},[1053,8573,1140],{"emptyLinePlaceholder":1139},[1053,8575,8576],{"class":1055,"line":4870},[1053,8577,8578],{"class":1059},"# Get all developers on a project\n",[1053,8580,8581],{"class":1055,"line":4888},[1053,8582,8583],{"class":1059},"# developers = ProjectMembership.objects.filter(\n",[1053,8585,8586],{"class":1055,"line":4893},[1053,8587,8522],{"class":1059},[1053,8589,8590],{"class":1055,"line":4906},[1053,8591,8527],{"class":1059},[1053,8593,8594],{"class":1055,"line":4951},[1053,8595,8565],{"class":1059},[1053,8597,8598],{"class":1055,"line":4956},[1053,8599,8542],{"class":1059},[1038,8601,8603],{"id":8602},"advanced-many-to-many-patterns","Advanced Many-to-Many Patterns",[1043,8605,8607],{"className":1045,"code":8606,"language":1047,"meta":1048,"style":1048},"# models.py\nfrom django.db import models\n\nclass Course(models.Model):\n    name = models.CharField(max_length=200)\n    code = models.CharField(max_length=10, unique=True)\n    credits = models.PositiveSmallIntegerField()\n    \n    def __str__(self):\n        return f'{self.code}: {self.name}'\n\nclass Student(models.Model):\n    student_id = models.CharField(max_length=20, unique=True)\n    first_name = models.CharField(max_length=50)\n    last_name = models.CharField(max_length=50)\n    email = models.EmailField(unique=True)\n    \n    # Many-to-many with additional enrollment data\n    courses = models.ManyToManyField(\n        Course,\n        through='Enrollment',\n        related_name='students'\n    )\n    \n    def __str__(self):\n        return f'{self.first_name} {self.last_name} ({self.student_id})'\n    \n    def get_current_courses(self):\n        \"\"\"Get currently enrolled courses\"\"\"\n        from django.utils import timezone\n        current_semester = timezone.now().year  # Simplified\n        return self.courses.filter(\n            enrollment__semester_year=current_semester,\n            enrollment__is_active=True\n        )\n    \n    def get_gpa(self):\n        \"\"\"Calculate GPA from completed courses\"\"\"\n        completed_enrollments = Enrollment.objects.filter(\n            student=self,\n            grade__isnull=False\n        )\n        \n        if not completed_enrollments:\n            return None\n        \n        total_points = 0\n        total_credits = 0\n        \n        grade_points = {'A': 4.0, 'B': 3.0, 'C': 2.0, 'D': 1.0, 'F': 0.0}\n        \n        for enrollment in completed_enrollments:\n            points = grade_points.get(enrollment.grade, 0.0)\n            credits = enrollment.course.credits\n            total_points += points * credits\n            total_credits += credits\n        \n        return total_points / total_credits if total_credits > 0 else 0.0\n\nclass Enrollment(models.Model):\n    \"\"\"Through model for Student-Course relationship\"\"\"\n    \n    GRADE_CHOICES = [\n        ('A', 'A'),\n        ('B', 'B'),\n        ('C', 'C'),\n        ('D', 'D'),\n        ('F', 'F'),\n        ('I', 'Incomplete'),\n        ('W', 'Withdrawn'),\n    ]\n    \n    student = models.ForeignKey(Student, on_delete=models.CASCADE)\n    course = models.ForeignKey(Course, on_delete=models.CASCADE)\n    \n    # Enrollment details\n    semester_year = models.PositiveIntegerField()\n    semester_term = models.CharField(\n        max_length=10,\n        choices=[('fall', 'Fall'), ('spring', 'Spring'), ('summer', 'Summer')]\n    )\n    \n    enrollment_date = models.DateField(auto_now_add=True)\n    is_active = models.BooleanField(default=True)\n    \n    # Grading\n    grade = models.CharField(max_length=2, choices=GRADE_CHOICES, null=True, blank=True)\n    grade_date = models.DateField(null=True, blank=True)\n    \n    # Attendance tracking\n    classes_attended = models.PositiveIntegerField(default=0)\n    total_classes = models.PositiveIntegerField(default=0)\n    \n    class Meta:\n        unique_together = [['student', 'course', 'semester_year', 'semester_term']]\n        ordering = ['-semester_year', 'semester_term']\n    \n    def __str__(self):\n        return f'{self.student} enrolled in {self.course} ({self.semester_term} {self.semester_year})'\n    \n    @property\n    def attendance_percentage(self):\n        if self.total_classes > 0:\n            return (self.classes_attended / self.total_classes) * 100\n        return 0\n    \n    def is_passing(self):\n        \"\"\"Check if student is passing the course\"\"\"\n        passing_grades = ['A', 'B', 'C', 'D']\n        return self.grade in passing_grades if self.grade else None\n\n# Self-referential many-to-many\nclass Person(models.Model):\n    name = models.CharField(max_length=100)\n    email = models.EmailField(unique=True)\n    \n    # Many-to-many relationship with itself\n    friends = models.ManyToManyField(\n        'self',\n        through='Friendship',\n        symmetrical=False,  # Friendship might not be mutual\n        related_name='friend_of'\n    )\n    \n    def __str__(self):\n        return self.name\n\nclass Friendship(models.Model):\n    \"\"\"Through model for Person-Person friendship\"\"\"\n    \n    from_person = models.ForeignKey(\n        Person,\n        on_delete=models.CASCADE,\n        related_name='friendships_initiated'\n    )\n    to_person = models.ForeignKey(\n        Person,\n        on_delete=models.CASCADE,\n        related_name='friendships_received'\n    )\n    \n    created_date = models.DateField(auto_now_add=True)\n    is_confirmed = models.BooleanField(default=False)\n    \n    class Meta:\n        unique_together = [['from_person', 'to_person']]\n    \n    def __str__(self):\n        status = 'confirmed' if self.is_confirmed else 'pending'\n        return f'{self.from_person} -> {self.to_person} ({status})'\n",[1050,8608,8609,8613,8627,8631,8648,8670,8701,8716,8720,8732,8765,8769,8786,8817,8839,8861,8883,8887,8892,8907,8914,8929,8942,8946,8950,8962,9005,9009,9022,9031,9045,9065,9082,9094,9104,9108,9112,9125,9134,9154,9165,9175,9179,9184,9195,9201,9205,9215,9224,9228,9307,9311,9324,9355,9375,9391,9400,9404,9434,9438,9454,9463,9467,9476,9496,9516,9536,9556,9576,9598,9620,9624,9628,9660,9692,9696,9701,9716,9731,9742,9810,9814,9818,9841,9863,9867,9872,9920,9951,9955,9960,9983,10006,10010,10018,10061,10086,10090,10102,10157,10161,10167,10180,10198,10227,10233,10237,10250,10259,10300,10328,10332,10337,10353,10375,10397,10401,10406,10421,10431,10446,10460,10473,10477,10481,10493,10503,10507,10524,10533,10537,10552,10559,10573,10586,10590,10605,10611,10625,10638,10642,10646,10669,10693,10698,10707,10734,10739,10752,10786],{"__ignoreMap":1048},[1053,8610,8611],{"class":1055,"line":1056},[1053,8612,1060],{"class":1059},[1053,8614,8615,8617,8619,8621,8623,8625],{"class":1055,"line":1063},[1053,8616,1067],{"class":1066},[1053,8618,1071],{"class":1070},[1053,8620,1075],{"class":1074},[1053,8622,1078],{"class":1070},[1053,8624,1081],{"class":1066},[1053,8626,1084],{"class":1070},[1053,8628,8629],{"class":1055,"line":1087},[1053,8630,1140],{"emptyLinePlaceholder":1139},[1053,8632,8633,8635,8638,8640,8642,8644,8646],{"class":1055,"line":1114},[1053,8634,1147],{"class":1146},[1053,8636,8637],{"class":1150}," Course",[1053,8639,1154],{"class":1074},[1053,8641,1158],{"class":1157},[1053,8643,1075],{"class":1074},[1053,8645,1163],{"class":1157},[1053,8647,1166],{"class":1074},[1053,8649,8650,8652,8654,8656,8658,8660,8662,8664,8666,8668],{"class":1055,"line":1136},[1053,8651,2280],{"class":1070},[1053,8653,1195],{"class":1074},[1053,8655,1198],{"class":1070},[1053,8657,1075],{"class":1074},[1053,8659,1409],{"class":1203},[1053,8661,1154],{"class":1074},[1053,8663,1291],{"class":1222},[1053,8665,1195],{"class":1074},[1053,8667,2297],{"class":1296},[1053,8669,1312],{"class":1074},[1053,8671,8672,8675,8677,8679,8681,8683,8685,8687,8689,8691,8693,8695,8697,8699],{"class":1055,"line":1143},[1053,8673,8674],{"class":1070},"    code ",[1053,8676,1195],{"class":1074},[1053,8678,1198],{"class":1070},[1053,8680,1075],{"class":1074},[1053,8682,1409],{"class":1203},[1053,8684,1154],{"class":1074},[1053,8686,1291],{"class":1222},[1053,8688,1195],{"class":1074},[1053,8690,3155],{"class":1296},[1053,8692,1300],{"class":1074},[1053,8694,2646],{"class":1222},[1053,8696,1195],{"class":1074},[1053,8698,1309],{"class":1308},[1053,8700,1312],{"class":1074},[1053,8702,8703,8706,8708,8710,8712,8714],{"class":1055,"line":1169},[1053,8704,8705],{"class":1654},"    credits",[1053,8707,2728],{"class":1074},[1053,8709,1198],{"class":1070},[1053,8711,1075],{"class":1074},[1053,8713,7827],{"class":1203},[1053,8715,1849],{"class":1074},[1053,8717,8718],{"class":1055,"line":1183},[1053,8719,1186],{"class":1070},[1053,8721,8722,8724,8726,8728,8730],{"class":1055,"line":1189},[1053,8723,1651],{"class":1146},[1053,8725,1655],{"class":1654},[1053,8727,1154],{"class":1074},[1053,8729,1661],{"class":1660},[1053,8731,1166],{"class":1074},[1053,8733,8734,8736,8738,8740,8742,8744,8746,8748,8750,8753,8755,8757,8759,8761,8763],{"class":1055,"line":1210},[1053,8735,1669],{"class":1066},[1053,8737,1672],{"class":1146},[1053,8739,1247],{"class":1250},[1053,8741,1679],{"class":1678},[1053,8743,1661],{"class":1682},[1053,8745,1075],{"class":1074},[1053,8747,1050],{"class":1687},[1053,8749,1696],{"class":1678},[1053,8751,8752],{"class":1250},": ",[1053,8754,1679],{"class":1678},[1053,8756,1661],{"class":1682},[1053,8758,1075],{"class":1074},[1053,8760,3632],{"class":1687},[1053,8762,1696],{"class":1678},[1053,8764,1254],{"class":1250},[1053,8766,8767],{"class":1055,"line":1219},[1053,8768,1140],{"emptyLinePlaceholder":1139},[1053,8770,8771,8773,8776,8778,8780,8782,8784],{"class":1055,"line":1238},[1053,8772,1147],{"class":1146},[1053,8774,8775],{"class":1150}," Student",[1053,8777,1154],{"class":1074},[1053,8779,1158],{"class":1157},[1053,8781,1075],{"class":1074},[1053,8783,1163],{"class":1157},[1053,8785,1166],{"class":1074},[1053,8787,8788,8791,8793,8795,8797,8799,8801,8803,8805,8807,8809,8811,8813,8815],{"class":1055,"line":1257},[1053,8789,8790],{"class":1070},"    student_id ",[1053,8792,1195],{"class":1074},[1053,8794,1198],{"class":1070},[1053,8796,1075],{"class":1074},[1053,8798,1409],{"class":1203},[1053,8800,1154],{"class":1074},[1053,8802,1291],{"class":1222},[1053,8804,1195],{"class":1074},[1053,8806,1418],{"class":1296},[1053,8808,1300],{"class":1074},[1053,8810,2646],{"class":1222},[1053,8812,1195],{"class":1074},[1053,8814,1309],{"class":1308},[1053,8816,1312],{"class":1074},[1053,8818,8819,8821,8823,8825,8827,8829,8831,8833,8835,8837],{"class":1055,"line":1263},[1053,8820,2826],{"class":1070},[1053,8822,1195],{"class":1074},[1053,8824,1198],{"class":1070},[1053,8826,1075],{"class":1074},[1053,8828,1409],{"class":1203},[1053,8830,1154],{"class":1074},[1053,8832,1291],{"class":1222},[1053,8834,1195],{"class":1074},[1053,8836,1488],{"class":1296},[1053,8838,1312],{"class":1074},[1053,8840,8841,8843,8845,8847,8849,8851,8853,8855,8857,8859],{"class":1055,"line":1268},[1053,8842,2849],{"class":1070},[1053,8844,1195],{"class":1074},[1053,8846,1198],{"class":1070},[1053,8848,1075],{"class":1074},[1053,8850,1409],{"class":1203},[1053,8852,1154],{"class":1074},[1053,8854,1291],{"class":1222},[1053,8856,1195],{"class":1074},[1053,8858,1488],{"class":1296},[1053,8860,1312],{"class":1074},[1053,8862,8863,8865,8867,8869,8871,8873,8875,8877,8879,8881],{"class":1055,"line":1274},[1053,8864,2872],{"class":1070},[1053,8866,1195],{"class":1074},[1053,8868,1198],{"class":1070},[1053,8870,1075],{"class":1074},[1053,8872,2881],{"class":1203},[1053,8874,1154],{"class":1074},[1053,8876,2886],{"class":1222},[1053,8878,1195],{"class":1074},[1053,8880,1309],{"class":1308},[1053,8882,1312],{"class":1074},[1053,8884,8885],{"class":1055,"line":1315},[1053,8886,1186],{"class":1070},[1053,8888,8889],{"class":1055,"line":1349},[1053,8890,8891],{"class":1059},"    # Many-to-many with additional enrollment data\n",[1053,8893,8894,8897,8899,8901,8903,8905],{"class":1055,"line":1397},[1053,8895,8896],{"class":1070},"    courses ",[1053,8898,1195],{"class":1074},[1053,8900,1198],{"class":1070},[1053,8902,1075],{"class":1074},[1053,8904,6718],{"class":1203},[1053,8906,1207],{"class":1074},[1053,8908,8909,8912],{"class":1055,"line":1431},[1053,8910,8911],{"class":1203},"        Course",[1053,8913,1216],{"class":1074},[1053,8915,8916,8918,8920,8922,8925,8927],{"class":1055,"line":1457},[1053,8917,7378],{"class":1222},[1053,8919,1195],{"class":1074},[1053,8921,1247],{"class":1246},[1053,8923,8924],{"class":1250},"Enrollment",[1053,8926,1247],{"class":1246},[1053,8928,1216],{"class":1074},[1053,8930,8931,8933,8935,8937,8940],{"class":1055,"line":1462},[1053,8932,1241],{"class":1222},[1053,8934,1195],{"class":1074},[1053,8936,1247],{"class":1246},[1053,8938,8939],{"class":1250},"students",[1053,8941,1254],{"class":1246},[1053,8943,8944],{"class":1055,"line":1468},[1053,8945,1260],{"class":1074},[1053,8947,8948],{"class":1055,"line":1501},[1053,8949,1186],{"class":1070},[1053,8951,8952,8954,8956,8958,8960],{"class":1055,"line":1525},[1053,8953,1651],{"class":1146},[1053,8955,1655],{"class":1654},[1053,8957,1154],{"class":1074},[1053,8959,1661],{"class":1660},[1053,8961,1166],{"class":1074},[1053,8963,8964,8966,8968,8970,8972,8974,8976,8978,8980,8982,8984,8986,8988,8990,8992,8994,8996,8998,9001,9003],{"class":1055,"line":1530},[1053,8965,1669],{"class":1066},[1053,8967,1672],{"class":1146},[1053,8969,1247],{"class":1250},[1053,8971,1679],{"class":1678},[1053,8973,1661],{"class":1682},[1053,8975,1075],{"class":1074},[1053,8977,2925],{"class":1687},[1053,8979,1696],{"class":1678},[1053,8981,2930],{"class":1678},[1053,8983,1661],{"class":1682},[1053,8985,1075],{"class":1074},[1053,8987,2937],{"class":1687},[1053,8989,1696],{"class":1678},[1053,8991,1913],{"class":1250},[1053,8993,1679],{"class":1678},[1053,8995,1661],{"class":1682},[1053,8997,1075],{"class":1074},[1053,8999,9000],{"class":1687},"student_id",[1053,9002,1696],{"class":1678},[1053,9004,7990],{"class":1250},[1053,9006,9007],{"class":1055,"line":1536},[1053,9008,1186],{"class":1070},[1053,9010,9011,9013,9016,9018,9020],{"class":1055,"line":1562},[1053,9012,1651],{"class":1146},[1053,9014,9015],{"class":1722}," get_current_courses",[1053,9017,1154],{"class":1074},[1053,9019,1661],{"class":1660},[1053,9021,1166],{"class":1074},[1053,9023,9024,9026,9029],{"class":1055,"line":1587},[1053,9025,3724],{"class":1172},[1053,9027,9028],{"class":1176},"Get currently enrolled courses",[1053,9030,1180],{"class":1172},[1053,9032,9033,9035,9037,9039,9041,9043],{"class":1055,"line":1592},[1053,9034,8018],{"class":1066},[1053,9036,1071],{"class":1070},[1053,9038,1075],{"class":1074},[1053,9040,1819],{"class":1070},[1053,9042,1081],{"class":1066},[1053,9044,1824],{"class":1070},[1053,9046,9047,9050,9052,9054,9056,9058,9060,9062],{"class":1055,"line":1618},[1053,9048,9049],{"class":1070},"        current_semester ",[1053,9051,1195],{"class":1074},[1053,9053,1835],{"class":1070},[1053,9055,1075],{"class":1074},[1053,9057,1840],{"class":1203},[1053,9059,1843],{"class":1074},[1053,9061,1863],{"class":1687},[1053,9063,9064],{"class":1059},"  # Simplified\n",[1053,9066,9067,9069,9071,9073,9076,9078,9080],{"class":1055,"line":1643},[1053,9068,1669],{"class":1066},[1053,9070,1737],{"class":1682},[1053,9072,1075],{"class":1074},[1053,9074,9075],{"class":1687},"courses",[1053,9077,1075],{"class":1074},[1053,9079,5036],{"class":1203},[1053,9081,1207],{"class":1074},[1053,9083,9084,9087,9089,9092],{"class":1055,"line":1648},[1053,9085,9086],{"class":1222},"            enrollment__semester_year",[1053,9088,1195],{"class":1074},[1053,9090,9091],{"class":1203},"current_semester",[1053,9093,1216],{"class":1074},[1053,9095,9096,9099,9101],{"class":1055,"line":1666},[1053,9097,9098],{"class":1222},"            enrollment__is_active",[1053,9100,1195],{"class":1074},[1053,9102,9103],{"class":1308},"True\n",[1053,9105,9106],{"class":1055,"line":1702},[1053,9107,8119],{"class":1074},[1053,9109,9110],{"class":1055,"line":1707},[1053,9111,1186],{"class":1070},[1053,9113,9114,9116,9119,9121,9123],{"class":1055,"line":1717},[1053,9115,1651],{"class":1146},[1053,9117,9118],{"class":1722}," get_gpa",[1053,9120,1154],{"class":1074},[1053,9122,1661],{"class":1660},[1053,9124,1166],{"class":1074},[1053,9126,9127,9129,9132],{"class":1055,"line":1732},[1053,9128,3724],{"class":1172},[1053,9130,9131],{"class":1176},"Calculate GPA from completed courses",[1053,9133,1180],{"class":1172},[1053,9135,9136,9139,9141,9144,9146,9148,9150,9152],{"class":1055,"line":1767},[1053,9137,9138],{"class":1070},"        completed_enrollments ",[1053,9140,1195],{"class":1074},[1053,9142,9143],{"class":1070}," Enrollment",[1053,9145,1075],{"class":1074},[1053,9147,2092],{"class":1687},[1053,9149,1075],{"class":1074},[1053,9151,5036],{"class":1203},[1053,9153,1207],{"class":1074},[1053,9155,9156,9159,9161,9163],{"class":1055,"line":1772},[1053,9157,9158],{"class":1222},"            student",[1053,9160,1195],{"class":1074},[1053,9162,1661],{"class":1682},[1053,9164,1216],{"class":1074},[1053,9166,9167,9170,9172],{"class":1055,"line":1779},[1053,9168,9169],{"class":1222},"            grade__isnull",[1053,9171,1195],{"class":1074},[1053,9173,9174],{"class":1308},"False\n",[1053,9176,9177],{"class":1055,"line":1793},[1053,9178,8119],{"class":1074},[1053,9180,9181],{"class":1055,"line":1809},[1053,9182,9183],{"class":1070},"        \n",[1053,9185,9186,9188,9190,9193],{"class":1055,"line":1827},[1053,9187,1796],{"class":1066},[1053,9189,2699],{"class":1752},[1053,9191,9192],{"class":1070}," completed_enrollments",[1053,9194,1806],{"class":1074},[1053,9196,9197,9199],{"class":1055,"line":1852},[1053,9198,1855],{"class":1066},[1053,9200,1951],{"class":1308},[1053,9202,9203],{"class":1055,"line":1884},[1053,9204,9183],{"class":1070},[1053,9206,9207,9210,9212],{"class":1055,"line":1940},[1053,9208,9209],{"class":1070},"        total_points ",[1053,9211,1195],{"class":1074},[1053,9213,9214],{"class":1296}," 0\n",[1053,9216,9217,9220,9222],{"class":1055,"line":1946},[1053,9218,9219],{"class":1070},"        total_credits ",[1053,9221,1195],{"class":1074},[1053,9223,9214],{"class":1296},[1053,9225,9226],{"class":1055,"line":1954},[1053,9227,9183],{"class":1070},[1053,9229,9230,9233,9235,9237,9239,9242,9244,9246,9249,9251,9253,9256,9258,9260,9263,9265,9267,9270,9272,9274,9277,9279,9281,9284,9286,9288,9291,9293,9295,9298,9300,9302,9305],{"class":1055,"line":1959},[1053,9231,9232],{"class":1070},"        grade_points ",[1053,9234,1195],{"class":1074},[1053,9236,2930],{"class":1074},[1053,9238,1247],{"class":1246},[1053,9240,9241],{"class":1250},"A",[1053,9243,1247],{"class":1246},[1053,9245,5821],{"class":1074},[1053,9247,9248],{"class":1296}," 4.0",[1053,9250,1300],{"class":1074},[1053,9252,2175],{"class":1246},[1053,9254,9255],{"class":1250},"B",[1053,9257,1247],{"class":1246},[1053,9259,5821],{"class":1074},[1053,9261,9262],{"class":1296}," 3.0",[1053,9264,1300],{"class":1074},[1053,9266,2175],{"class":1246},[1053,9268,9269],{"class":1250},"C",[1053,9271,1247],{"class":1246},[1053,9273,5821],{"class":1074},[1053,9275,9276],{"class":1296}," 2.0",[1053,9278,1300],{"class":1074},[1053,9280,2175],{"class":1246},[1053,9282,9283],{"class":1250},"D",[1053,9285,1247],{"class":1246},[1053,9287,5821],{"class":1074},[1053,9289,9290],{"class":1296}," 1.0",[1053,9292,1300],{"class":1074},[1053,9294,2175],{"class":1246},[1053,9296,9297],{"class":1250},"F",[1053,9299,1247],{"class":1246},[1053,9301,5821],{"class":1074},[1053,9303,9304],{"class":1296}," 0.0",[1053,9306,5831],{"class":1074},[1053,9308,9309],{"class":1055,"line":1965},[1053,9310,9183],{"class":1070},[1053,9312,9313,9315,9318,9320,9322],{"class":1055,"line":1991},[1053,9314,3840],{"class":1066},[1053,9316,9317],{"class":1070}," enrollment ",[1053,9319,3846],{"class":1066},[1053,9321,9192],{"class":1070},[1053,9323,1806],{"class":1074},[1053,9325,9326,9329,9331,9334,9336,9339,9341,9344,9346,9349,9351,9353],{"class":1055,"line":2008},[1053,9327,9328],{"class":1070},"            points ",[1053,9330,1195],{"class":1074},[1053,9332,9333],{"class":1070}," grade_points",[1053,9335,1075],{"class":1074},[1053,9337,9338],{"class":1203},"get",[1053,9340,1154],{"class":1074},[1053,9342,9343],{"class":1203},"enrollment",[1053,9345,1075],{"class":1074},[1053,9347,9348],{"class":1687},"grade",[1053,9350,1300],{"class":1074},[1053,9352,9304],{"class":1296},[1053,9354,1312],{"class":1074},[1053,9356,9357,9360,9362,9365,9367,9370,9372],{"class":1055,"line":2013},[1053,9358,9359],{"class":1654},"            credits",[1053,9361,2728],{"class":1074},[1053,9363,9364],{"class":1070}," enrollment",[1053,9366,1075],{"class":1074},[1053,9368,9369],{"class":1687},"course",[1053,9371,1075],{"class":1074},[1053,9373,9374],{"class":1687},"credits\n",[1053,9376,9377,9380,9383,9386,9388],{"class":1055,"line":2039},[1053,9378,9379],{"class":1070},"            total_points ",[1053,9381,9382],{"class":1074},"+=",[1053,9384,9385],{"class":1070}," points ",[1053,9387,2757],{"class":1752},[1053,9389,9390],{"class":1654}," credits\n",[1053,9392,9393,9396,9398],{"class":1055,"line":2074},[1053,9394,9395],{"class":1070},"            total_credits ",[1053,9397,9382],{"class":1074},[1053,9399,9390],{"class":1654},[1053,9401,9402],{"class":1055,"line":2084},[1053,9403,9183],{"class":1070},[1053,9405,9406,9408,9411,9414,9417,9420,9422,9425,9428,9431],{"class":1055,"line":2111},[1053,9407,1669],{"class":1066},[1053,9409,9410],{"class":1070}," total_points ",[1053,9412,9413],{"class":1752},"/",[1053,9415,9416],{"class":1070}," total_credits ",[1053,9418,9419],{"class":1066},"if",[1053,9421,9416],{"class":1070},[1053,9423,9424],{"class":1752},">",[1053,9426,9427],{"class":1296}," 0",[1053,9429,9430],{"class":1066}," else",[1053,9432,9433],{"class":1296}," 0.0\n",[1053,9435,9436],{"class":1055,"line":2116},[1053,9437,1140],{"emptyLinePlaceholder":1139},[1053,9439,9440,9442,9444,9446,9448,9450,9452],{"class":1055,"line":2137},[1053,9441,1147],{"class":1146},[1053,9443,9143],{"class":1150},[1053,9445,1154],{"class":1074},[1053,9447,1158],{"class":1157},[1053,9449,1075],{"class":1074},[1053,9451,1163],{"class":1157},[1053,9453,1166],{"class":1074},[1053,9455,9456,9458,9461],{"class":1055,"line":2161},[1053,9457,1173],{"class":1172},[1053,9459,9460],{"class":1176},"Through model for Student-Course relationship",[1053,9462,1180],{"class":1172},[1053,9464,9465],{"class":1055,"line":2184},[1053,9466,1186],{"class":1070},[1053,9468,9469,9472,9474],{"class":1055,"line":2201},[1053,9470,9471],{"class":1682},"    GRADE_CHOICES",[1053,9473,2728],{"class":1074},[1053,9475,3935],{"class":1074},[1053,9477,9478,9480,9482,9484,9486,9488,9490,9492,9494],{"class":1055,"line":2206},[1053,9479,3940],{"class":1074},[1053,9481,1247],{"class":1246},[1053,9483,9241],{"class":1250},[1053,9485,1247],{"class":1246},[1053,9487,1300],{"class":1074},[1053,9489,2175],{"class":1246},[1053,9491,9241],{"class":1250},[1053,9493,1247],{"class":1246},[1053,9495,3959],{"class":1074},[1053,9497,9498,9500,9502,9504,9506,9508,9510,9512,9514],{"class":1055,"line":2212},[1053,9499,3940],{"class":1074},[1053,9501,1247],{"class":1246},[1053,9503,9255],{"class":1250},[1053,9505,1247],{"class":1246},[1053,9507,1300],{"class":1074},[1053,9509,2175],{"class":1246},[1053,9511,9255],{"class":1250},[1053,9513,1247],{"class":1246},[1053,9515,3959],{"class":1074},[1053,9517,9518,9520,9522,9524,9526,9528,9530,9532,9534],{"class":1055,"line":2218},[1053,9519,3940],{"class":1074},[1053,9521,1247],{"class":1246},[1053,9523,9269],{"class":1250},[1053,9525,1247],{"class":1246},[1053,9527,1300],{"class":1074},[1053,9529,2175],{"class":1246},[1053,9531,9269],{"class":1250},[1053,9533,1247],{"class":1246},[1053,9535,3959],{"class":1074},[1053,9537,9538,9540,9542,9544,9546,9548,9550,9552,9554],{"class":1055,"line":2224},[1053,9539,3940],{"class":1074},[1053,9541,1247],{"class":1246},[1053,9543,9283],{"class":1250},[1053,9545,1247],{"class":1246},[1053,9547,1300],{"class":1074},[1053,9549,2175],{"class":1246},[1053,9551,9283],{"class":1250},[1053,9553,1247],{"class":1246},[1053,9555,3959],{"class":1074},[1053,9557,9558,9560,9562,9564,9566,9568,9570,9572,9574],{"class":1055,"line":3229},[1053,9559,3940],{"class":1074},[1053,9561,1247],{"class":1246},[1053,9563,9297],{"class":1250},[1053,9565,1247],{"class":1246},[1053,9567,1300],{"class":1074},[1053,9569,2175],{"class":1246},[1053,9571,9297],{"class":1250},[1053,9573,1247],{"class":1246},[1053,9575,3959],{"class":1074},[1053,9577,9578,9580,9582,9585,9587,9589,9591,9594,9596],{"class":1055,"line":3235},[1053,9579,3940],{"class":1074},[1053,9581,1247],{"class":1246},[1053,9583,9584],{"class":1250},"I",[1053,9586,1247],{"class":1246},[1053,9588,1300],{"class":1074},[1053,9590,2175],{"class":1246},[1053,9592,9593],{"class":1250},"Incomplete",[1053,9595,1247],{"class":1246},[1053,9597,3959],{"class":1074},[1053,9599,9600,9602,9604,9607,9609,9611,9613,9616,9618],{"class":1055,"line":3259},[1053,9601,3940],{"class":1074},[1053,9603,1247],{"class":1246},[1053,9605,9606],{"class":1250},"W",[1053,9608,1247],{"class":1246},[1053,9610,1300],{"class":1074},[1053,9612,2175],{"class":1246},[1053,9614,9615],{"class":1250},"Withdrawn",[1053,9617,1247],{"class":1246},[1053,9619,3959],{"class":1074},[1053,9621,9622],{"class":1055,"line":3283},[1053,9623,4008],{"class":1074},[1053,9625,9626],{"class":1055,"line":3307},[1053,9627,1186],{"class":1070},[1053,9629,9630,9633,9635,9637,9639,9641,9643,9646,9648,9650,9652,9654,9656,9658],{"class":1055,"line":3312},[1053,9631,9632],{"class":1070},"    student ",[1053,9634,1195],{"class":1074},[1053,9636,1198],{"class":1070},[1053,9638,1075],{"class":1074},[1053,9640,2801],{"class":1203},[1053,9642,1154],{"class":1074},[1053,9644,9645],{"class":1203},"Student",[1053,9647,1300],{"class":1074},[1053,9649,2811],{"class":1222},[1053,9651,1195],{"class":1074},[1053,9653,1158],{"class":1203},[1053,9655,1075],{"class":1074},[1053,9657,1233],{"class":1232},[1053,9659,1312],{"class":1074},[1053,9661,9662,9665,9667,9669,9671,9673,9675,9678,9680,9682,9684,9686,9688,9690],{"class":1055,"line":3325},[1053,9663,9664],{"class":1070},"    course ",[1053,9666,1195],{"class":1074},[1053,9668,1198],{"class":1070},[1053,9670,1075],{"class":1074},[1053,9672,2801],{"class":1203},[1053,9674,1154],{"class":1074},[1053,9676,9677],{"class":1203},"Course",[1053,9679,1300],{"class":1074},[1053,9681,2811],{"class":1222},[1053,9683,1195],{"class":1074},[1053,9685,1158],{"class":1203},[1053,9687,1075],{"class":1074},[1053,9689,1233],{"class":1232},[1053,9691,1312],{"class":1074},[1053,9693,9694],{"class":1055,"line":4308},[1053,9695,1186],{"class":1070},[1053,9697,9698],{"class":1055,"line":4331},[1053,9699,9700],{"class":1059},"    # Enrollment details\n",[1053,9702,9703,9706,9708,9710,9712,9714],{"class":1055,"line":4363},[1053,9704,9705],{"class":1070},"    semester_year ",[1053,9707,1195],{"class":1074},[1053,9709,1198],{"class":1070},[1053,9711,1075],{"class":1074},[1053,9713,2608],{"class":1203},[1053,9715,1849],{"class":1074},[1053,9717,9718,9721,9723,9725,9727,9729],{"class":1055,"line":4368},[1053,9719,9720],{"class":1070},"    semester_term ",[1053,9722,1195],{"class":1074},[1053,9724,1198],{"class":1070},[1053,9726,1075],{"class":1074},[1053,9728,1409],{"class":1203},[1053,9730,1207],{"class":1074},[1053,9732,9733,9736,9738,9740],{"class":1055,"line":4377},[1053,9734,9735],{"class":1222},"        max_length",[1053,9737,1195],{"class":1074},[1053,9739,3155],{"class":1296},[1053,9741,1216],{"class":1074},[1053,9743,9744,9747,9750,9752,9755,9757,9759,9761,9764,9766,9769,9771,9773,9776,9778,9780,9782,9785,9787,9789,9791,9793,9796,9798,9800,9802,9805,9807],{"class":1055,"line":4395},[1053,9745,9746],{"class":1222},"        choices",[1053,9748,9749],{"class":1074},"=[(",[1053,9751,1247],{"class":1246},[1053,9753,9754],{"class":1250},"fall",[1053,9756,1247],{"class":1246},[1053,9758,1300],{"class":1074},[1053,9760,2175],{"class":1246},[1053,9762,9763],{"class":1250},"Fall",[1053,9765,1247],{"class":1246},[1053,9767,9768],{"class":1074},"),",[1053,9770,1913],{"class":1074},[1053,9772,1247],{"class":1246},[1053,9774,9775],{"class":1250},"spring",[1053,9777,1247],{"class":1246},[1053,9779,1300],{"class":1074},[1053,9781,2175],{"class":1246},[1053,9783,9784],{"class":1250},"Spring",[1053,9786,1247],{"class":1246},[1053,9788,9768],{"class":1074},[1053,9790,1913],{"class":1074},[1053,9792,1247],{"class":1246},[1053,9794,9795],{"class":1250},"summer",[1053,9797,1247],{"class":1246},[1053,9799,1300],{"class":1074},[1053,9801,2175],{"class":1246},[1053,9803,9804],{"class":1250},"Summer",[1053,9806,1247],{"class":1246},[1053,9808,9809],{"class":1074},")]\n",[1053,9811,9812],{"class":1055,"line":4405},[1053,9813,1260],{"class":1074},[1053,9815,9816],{"class":1055,"line":4443},[1053,9817,1186],{"class":1070},[1053,9819,9820,9823,9825,9827,9829,9831,9833,9835,9837,9839],{"class":1055,"line":4475},[1053,9821,9822],{"class":1070},"    enrollment_date ",[1053,9824,1195],{"class":1074},[1053,9826,1198],{"class":1070},[1053,9828,1075],{"class":1074},[1053,9830,1327],{"class":1203},[1053,9832,1154],{"class":1074},[1053,9834,1609],{"class":1222},[1053,9836,1195],{"class":1074},[1053,9838,1309],{"class":1308},[1053,9840,1312],{"class":1074},[1053,9842,9843,9845,9847,9849,9851,9853,9855,9857,9859,9861],{"class":1055,"line":4507},[1053,9844,7843],{"class":1070},[1053,9846,1195],{"class":1074},[1053,9848,1198],{"class":1070},[1053,9850,1075],{"class":1074},[1053,9852,1548],{"class":1203},[1053,9854,1154],{"class":1074},[1053,9856,1553],{"class":1222},[1053,9858,1195],{"class":1074},[1053,9860,1309],{"class":1308},[1053,9862,1312],{"class":1074},[1053,9864,9865],{"class":1055,"line":4513},[1053,9866,1186],{"class":1070},[1053,9868,9869],{"class":1055,"line":4518},[1053,9870,9871],{"class":1059},"    # Grading\n",[1053,9873,9874,9877,9879,9881,9883,9885,9887,9889,9891,9893,9895,9897,9899,9902,9904,9906,9908,9910,9912,9914,9916,9918],{"class":1055,"line":4531},[1053,9875,9876],{"class":1070},"    grade ",[1053,9878,1195],{"class":1074},[1053,9880,1198],{"class":1070},[1053,9882,1075],{"class":1074},[1053,9884,1409],{"class":1203},[1053,9886,1154],{"class":1074},[1053,9888,1291],{"class":1222},[1053,9890,1195],{"class":1074},[1053,9892,3165],{"class":1296},[1053,9894,1300],{"class":1074},[1053,9896,4259],{"class":1222},[1053,9898,1195],{"class":1074},[1053,9900,9901],{"class":4264},"GRADE_CHOICES",[1053,9903,1300],{"class":1074},[1053,9905,1388],{"class":1222},[1053,9907,1195],{"class":1074},[1053,9909,1309],{"class":1308},[1053,9911,1300],{"class":1074},[1053,9913,1303],{"class":1222},[1053,9915,1195],{"class":1074},[1053,9917,1309],{"class":1308},[1053,9919,1312],{"class":1074},[1053,9921,9922,9925,9927,9929,9931,9933,9935,9937,9939,9941,9943,9945,9947,9949],{"class":1055,"line":4543},[1053,9923,9924],{"class":1070},"    grade_date ",[1053,9926,1195],{"class":1074},[1053,9928,1198],{"class":1070},[1053,9930,1075],{"class":1074},[1053,9932,1327],{"class":1203},[1053,9934,1154],{"class":1074},[1053,9936,1332],{"class":1222},[1053,9938,1195],{"class":1074},[1053,9940,1309],{"class":1308},[1053,9942,1300],{"class":1074},[1053,9944,1303],{"class":1222},[1053,9946,1195],{"class":1074},[1053,9948,1309],{"class":1308},[1053,9950,1312],{"class":1074},[1053,9952,9953],{"class":1055,"line":4548},[1053,9954,1186],{"class":1070},[1053,9956,9957],{"class":1055,"line":4566},[1053,9958,9959],{"class":1059},"    # Attendance tracking\n",[1053,9961,9962,9965,9967,9969,9971,9973,9975,9977,9979,9981],{"class":1055,"line":4572},[1053,9963,9964],{"class":1070},"    classes_attended ",[1053,9966,1195],{"class":1074},[1053,9968,1198],{"class":1070},[1053,9970,1075],{"class":1074},[1053,9972,2608],{"class":1203},[1053,9974,1154],{"class":1074},[1053,9976,1553],{"class":1222},[1053,9978,1195],{"class":1074},[1053,9980,8353],{"class":1296},[1053,9982,1312],{"class":1074},[1053,9984,9985,9988,9990,9992,9994,9996,9998,10000,10002,10004],{"class":1055,"line":4588},[1053,9986,9987],{"class":1070},"    total_classes ",[1053,9989,1195],{"class":1074},[1053,9991,1198],{"class":1070},[1053,9993,1075],{"class":1074},[1053,9995,2608],{"class":1203},[1053,9997,1154],{"class":1074},[1053,9999,1553],{"class":1222},[1053,10001,1195],{"class":1074},[1053,10003,8353],{"class":1296},[1053,10005,1312],{"class":1074},[1053,10007,10008],{"class":1055,"line":4596},[1053,10009,1186],{"class":1070},[1053,10011,10012,10014,10016],{"class":1055,"line":4611},[1053,10013,3598],{"class":1146},[1053,10015,3601],{"class":1150},[1053,10017,1806],{"class":1074},[1053,10019,10020,10022,10024,10026,10028,10031,10033,10035,10037,10039,10041,10043,10045,10048,10050,10052,10054,10057,10059],{"class":1055,"line":4625},[1053,10021,7878],{"class":1070},[1053,10023,1195],{"class":1074},[1053,10025,7883],{"class":1074},[1053,10027,1247],{"class":1246},[1053,10029,10030],{"class":1250},"student",[1053,10032,1247],{"class":1246},[1053,10034,1300],{"class":1074},[1053,10036,2175],{"class":1246},[1053,10038,9369],{"class":1250},[1053,10040,1247],{"class":1246},[1053,10042,1300],{"class":1074},[1053,10044,2175],{"class":1246},[1053,10046,10047],{"class":1250},"semester_year",[1053,10049,1247],{"class":1246},[1053,10051,1300],{"class":1074},[1053,10053,2175],{"class":1246},[1053,10055,10056],{"class":1250},"semester_term",[1053,10058,1247],{"class":1246},[1053,10060,7911],{"class":1074},[1053,10062,10063,10065,10067,10069,10071,10074,10076,10078,10080,10082,10084],{"class":1055,"line":4630},[1053,10064,3622],{"class":1070},[1053,10066,1195],{"class":1074},[1053,10068,3627],{"class":1074},[1053,10070,1247],{"class":1246},[1053,10072,10073],{"class":1250},"-semester_year",[1053,10075,1247],{"class":1246},[1053,10077,1300],{"class":1074},[1053,10079,2175],{"class":1246},[1053,10081,10056],{"class":1250},[1053,10083,1247],{"class":1246},[1053,10085,3637],{"class":1074},[1053,10087,10088],{"class":1055,"line":4635},[1053,10089,1186],{"class":1070},[1053,10091,10092,10094,10096,10098,10100],{"class":1055,"line":4641},[1053,10093,1651],{"class":1146},[1053,10095,1655],{"class":1654},[1053,10097,1154],{"class":1074},[1053,10099,1661],{"class":1660},[1053,10101,1166],{"class":1074},[1053,10103,10104,10106,10108,10110,10112,10114,10116,10118,10120,10123,10125,10127,10129,10131,10133,10135,10137,10139,10141,10143,10145,10147,10149,10151,10153,10155],{"class":1055,"line":4656},[1053,10105,1669],{"class":1066},[1053,10107,1672],{"class":1146},[1053,10109,1247],{"class":1250},[1053,10111,1679],{"class":1678},[1053,10113,1661],{"class":1682},[1053,10115,1075],{"class":1074},[1053,10117,10030],{"class":1687},[1053,10119,1696],{"class":1678},[1053,10121,10122],{"class":1250}," enrolled in ",[1053,10124,1679],{"class":1678},[1053,10126,1661],{"class":1682},[1053,10128,1075],{"class":1074},[1053,10130,9369],{"class":1687},[1053,10132,1696],{"class":1678},[1053,10134,1913],{"class":1250},[1053,10136,1679],{"class":1678},[1053,10138,1661],{"class":1682},[1053,10140,1075],{"class":1074},[1053,10142,10056],{"class":1687},[1053,10144,1696],{"class":1678},[1053,10146,2930],{"class":1678},[1053,10148,1661],{"class":1682},[1053,10150,1075],{"class":1074},[1053,10152,10047],{"class":1687},[1053,10154,1696],{"class":1678},[1053,10156,7990],{"class":1250},[1053,10158,10159],{"class":1055,"line":4663},[1053,10160,1186],{"class":1070},[1053,10162,10163,10165],{"class":1055,"line":4678},[1053,10164,1710],{"class":1074},[1053,10166,1714],{"class":1713},[1053,10168,10169,10171,10174,10176,10178],{"class":1055,"line":4691},[1053,10170,1651],{"class":1146},[1053,10172,10173],{"class":1722}," attendance_percentage",[1053,10175,1154],{"class":1074},[1053,10177,1661],{"class":1660},[1053,10179,1166],{"class":1074},[1053,10181,10182,10184,10186,10188,10191,10194,10196],{"class":1055,"line":4696},[1053,10183,1796],{"class":1066},[1053,10185,1737],{"class":1682},[1053,10187,1075],{"class":1074},[1053,10189,10190],{"class":1687},"total_classes",[1053,10192,10193],{"class":1752}," >",[1053,10195,9427],{"class":1296},[1053,10197,1806],{"class":1074},[1053,10199,10200,10202,10204,10206,10208,10211,10214,10216,10218,10220,10222,10224],{"class":1055,"line":4701},[1053,10201,1855],{"class":1066},[1053,10203,1913],{"class":1074},[1053,10205,1661],{"class":1682},[1053,10207,1075],{"class":1074},[1053,10209,10210],{"class":1687},"classes_attended",[1053,10212,10213],{"class":1752}," /",[1053,10215,1737],{"class":1682},[1053,10217,1075],{"class":1074},[1053,10219,10190],{"class":1687},[1053,10221,1907],{"class":1074},[1053,10223,2681],{"class":1752},[1053,10225,10226],{"class":1296}," 100\n",[1053,10228,10229,10231],{"class":1055,"line":4707},[1053,10230,1669],{"class":1066},[1053,10232,9214],{"class":1296},[1053,10234,10235],{"class":1055,"line":4722},[1053,10236,1186],{"class":1070},[1053,10238,10239,10241,10244,10246,10248],{"class":1055,"line":4733},[1053,10240,1651],{"class":1146},[1053,10242,10243],{"class":1722}," is_passing",[1053,10245,1154],{"class":1074},[1053,10247,1661],{"class":1660},[1053,10249,1166],{"class":1074},[1053,10251,10252,10254,10257],{"class":1055,"line":4748},[1053,10253,3724],{"class":1172},[1053,10255,10256],{"class":1176},"Check if student is passing the course",[1053,10258,1180],{"class":1172},[1053,10260,10261,10264,10266,10268,10270,10272,10274,10276,10278,10280,10282,10284,10286,10288,10290,10292,10294,10296,10298],{"class":1055,"line":4759},[1053,10262,10263],{"class":1070},"        passing_grades ",[1053,10265,1195],{"class":1074},[1053,10267,3627],{"class":1074},[1053,10269,1247],{"class":1246},[1053,10271,9241],{"class":1250},[1053,10273,1247],{"class":1246},[1053,10275,1300],{"class":1074},[1053,10277,2175],{"class":1246},[1053,10279,9255],{"class":1250},[1053,10281,1247],{"class":1246},[1053,10283,1300],{"class":1074},[1053,10285,2175],{"class":1246},[1053,10287,9269],{"class":1250},[1053,10289,1247],{"class":1246},[1053,10291,1300],{"class":1074},[1053,10293,2175],{"class":1246},[1053,10295,9283],{"class":1250},[1053,10297,1247],{"class":1246},[1053,10299,3637],{"class":1074},[1053,10301,10302,10304,10306,10308,10310,10313,10316,10318,10320,10322,10324,10326],{"class":1055,"line":4770},[1053,10303,1669],{"class":1066},[1053,10305,1737],{"class":1682},[1053,10307,1075],{"class":1074},[1053,10309,9348],{"class":1687},[1053,10311,10312],{"class":1752}," in",[1053,10314,10315],{"class":1070}," passing_grades ",[1053,10317,9419],{"class":1066},[1053,10319,1737],{"class":1682},[1053,10321,1075],{"class":1074},[1053,10323,9348],{"class":1687},[1053,10325,9430],{"class":1066},[1053,10327,1951],{"class":1308},[1053,10329,10330],{"class":1055,"line":4784},[1053,10331,1140],{"emptyLinePlaceholder":1139},[1053,10333,10334],{"class":1055,"line":4789},[1053,10335,10336],{"class":1059},"# Self-referential many-to-many\n",[1053,10338,10339,10341,10343,10345,10347,10349,10351],{"class":1055,"line":4794},[1053,10340,1147],{"class":1146},[1053,10342,7280],{"class":1150},[1053,10344,1154],{"class":1074},[1053,10346,1158],{"class":1157},[1053,10348,1075],{"class":1074},[1053,10350,1163],{"class":1157},[1053,10352,1166],{"class":1074},[1053,10354,10355,10357,10359,10361,10363,10365,10367,10369,10371,10373],{"class":1055,"line":4809},[1053,10356,2280],{"class":1070},[1053,10358,1195],{"class":1074},[1053,10360,1198],{"class":1070},[1053,10362,1075],{"class":1074},[1053,10364,1409],{"class":1203},[1053,10366,1154],{"class":1074},[1053,10368,1291],{"class":1222},[1053,10370,1195],{"class":1074},[1053,10372,3106],{"class":1296},[1053,10374,1312],{"class":1074},[1053,10376,10377,10379,10381,10383,10385,10387,10389,10391,10393,10395],{"class":1055,"line":4833},[1053,10378,2872],{"class":1070},[1053,10380,1195],{"class":1074},[1053,10382,1198],{"class":1070},[1053,10384,1075],{"class":1074},[1053,10386,2881],{"class":1203},[1053,10388,1154],{"class":1074},[1053,10390,2886],{"class":1222},[1053,10392,1195],{"class":1074},[1053,10394,1309],{"class":1308},[1053,10396,1312],{"class":1074},[1053,10398,10399],{"class":1055,"line":4856},[1053,10400,1186],{"class":1070},[1053,10402,10403],{"class":1055,"line":4861},[1053,10404,10405],{"class":1059},"    # Many-to-many relationship with itself\n",[1053,10407,10408,10411,10413,10415,10417,10419],{"class":1055,"line":4870},[1053,10409,10410],{"class":1070},"    friends ",[1053,10412,1195],{"class":1074},[1053,10414,1198],{"class":1070},[1053,10416,1075],{"class":1074},[1053,10418,6718],{"class":1203},[1053,10420,1207],{"class":1074},[1053,10422,10423,10425,10427,10429],{"class":1055,"line":4888},[1053,10424,3527],{"class":1246},[1053,10426,1661],{"class":1250},[1053,10428,1247],{"class":1246},[1053,10430,1216],{"class":1074},[1053,10432,10433,10435,10437,10439,10442,10444],{"class":1055,"line":4893},[1053,10434,7378],{"class":1222},[1053,10436,1195],{"class":1074},[1053,10438,1247],{"class":1246},[1053,10440,10441],{"class":1250},"Friendship",[1053,10443,1247],{"class":1246},[1053,10445,1216],{"class":1074},[1053,10447,10448,10451,10453,10455,10457],{"class":1055,"line":4906},[1053,10449,10450],{"class":1222},"        symmetrical",[1053,10452,1195],{"class":1074},[1053,10454,1582],{"class":1308},[1053,10456,1300],{"class":1074},[1053,10458,10459],{"class":1059},"  # Friendship might not be mutual\n",[1053,10461,10462,10464,10466,10468,10471],{"class":1055,"line":4951},[1053,10463,1241],{"class":1222},[1053,10465,1195],{"class":1074},[1053,10467,1247],{"class":1246},[1053,10469,10470],{"class":1250},"friend_of",[1053,10472,1254],{"class":1246},[1053,10474,10475],{"class":1055,"line":4956},[1053,10476,1260],{"class":1074},[1053,10478,10479],{"class":1055,"line":4963},[1053,10480,1186],{"class":1070},[1053,10482,10483,10485,10487,10489,10491],{"class":1055,"line":4977},[1053,10484,1651],{"class":1146},[1053,10486,1655],{"class":1654},[1053,10488,1154],{"class":1074},[1053,10490,1661],{"class":1660},[1053,10492,1166],{"class":1074},[1053,10494,10495,10497,10499,10501],{"class":1055,"line":4994},[1053,10496,1669],{"class":1066},[1053,10498,1737],{"class":1682},[1053,10500,1075],{"class":1074},[1053,10502,2341],{"class":1687},[1053,10504,10505],{"class":1055,"line":4999},[1053,10506,1140],{"emptyLinePlaceholder":1139},[1053,10508,10509,10511,10514,10516,10518,10520,10522],{"class":1055,"line":5013},[1053,10510,1147],{"class":1146},[1053,10512,10513],{"class":1150}," Friendship",[1053,10515,1154],{"class":1074},[1053,10517,1158],{"class":1157},[1053,10519,1075],{"class":1074},[1053,10521,1163],{"class":1157},[1053,10523,1166],{"class":1074},[1053,10525,10526,10528,10531],{"class":1055,"line":5023},[1053,10527,1173],{"class":1172},[1053,10529,10530],{"class":1176},"Through model for Person-Person friendship",[1053,10532,1180],{"class":1172},[1053,10534,10535],{"class":1055,"line":5050},[1053,10536,1186],{"class":1070},[1053,10538,10539,10542,10544,10546,10548,10550],{"class":1055,"line":5055},[1053,10540,10541],{"class":1070},"    from_person ",[1053,10543,1195],{"class":1074},[1053,10545,1198],{"class":1070},[1053,10547,1075],{"class":1074},[1053,10549,2801],{"class":1203},[1053,10551,1207],{"class":1074},[1053,10553,10554,10557],{"class":1055,"line":5060},[1053,10555,10556],{"class":1203},"        Person",[1053,10558,1216],{"class":1074},[1053,10560,10561,10563,10565,10567,10569,10571],{"class":1055,"line":5066},[1053,10562,1223],{"class":1222},[1053,10564,1195],{"class":1074},[1053,10566,1158],{"class":1203},[1053,10568,1075],{"class":1074},[1053,10570,1233],{"class":1232},[1053,10572,1216],{"class":1074},[1053,10574,10575,10577,10579,10581,10584],{"class":1055,"line":5072},[1053,10576,1241],{"class":1222},[1053,10578,1195],{"class":1074},[1053,10580,1247],{"class":1246},[1053,10582,10583],{"class":1250},"friendships_initiated",[1053,10585,1254],{"class":1246},[1053,10587,10588],{"class":1055,"line":5077},[1053,10589,1260],{"class":1074},[1053,10591,10592,10595,10597,10599,10601,10603],{"class":1055,"line":5083},[1053,10593,10594],{"class":1070},"    to_person ",[1053,10596,1195],{"class":1074},[1053,10598,1198],{"class":1070},[1053,10600,1075],{"class":1074},[1053,10602,2801],{"class":1203},[1053,10604,1207],{"class":1074},[1053,10606,10607,10609],{"class":1055,"line":5089},[1053,10608,10556],{"class":1203},[1053,10610,1216],{"class":1074},[1053,10612,10613,10615,10617,10619,10621,10623],{"class":1055,"line":5094},[1053,10614,1223],{"class":1222},[1053,10616,1195],{"class":1074},[1053,10618,1158],{"class":1203},[1053,10620,1075],{"class":1074},[1053,10622,1233],{"class":1232},[1053,10624,1216],{"class":1074},[1053,10626,10627,10629,10631,10633,10636],{"class":1055,"line":5100},[1053,10628,1241],{"class":1222},[1053,10630,1195],{"class":1074},[1053,10632,1247],{"class":1246},[1053,10634,10635],{"class":1250},"friendships_received",[1053,10637,1254],{"class":1246},[1053,10639,10640],{"class":1055,"line":5106},[1053,10641,1260],{"class":1074},[1053,10643,10644],{"class":1055,"line":5111},[1053,10645,1186],{"class":1070},[1053,10647,10648,10651,10653,10655,10657,10659,10661,10663,10665,10667],{"class":1055,"line":5117},[1053,10649,10650],{"class":1070},"    created_date ",[1053,10652,1195],{"class":1074},[1053,10654,1198],{"class":1070},[1053,10656,1075],{"class":1074},[1053,10658,1327],{"class":1203},[1053,10660,1154],{"class":1074},[1053,10662,1609],{"class":1222},[1053,10664,1195],{"class":1074},[1053,10666,1309],{"class":1308},[1053,10668,1312],{"class":1074},[1053,10670,10672,10675,10677,10679,10681,10683,10685,10687,10689,10691],{"class":1055,"line":10671},143,[1053,10673,10674],{"class":1070},"    is_confirmed ",[1053,10676,1195],{"class":1074},[1053,10678,1198],{"class":1070},[1053,10680,1075],{"class":1074},[1053,10682,1548],{"class":1203},[1053,10684,1154],{"class":1074},[1053,10686,1553],{"class":1222},[1053,10688,1195],{"class":1074},[1053,10690,1582],{"class":1308},[1053,10692,1312],{"class":1074},[1053,10694,10696],{"class":1055,"line":10695},144,[1053,10697,1186],{"class":1070},[1053,10699,10701,10703,10705],{"class":1055,"line":10700},145,[1053,10702,3598],{"class":1146},[1053,10704,3601],{"class":1150},[1053,10706,1806],{"class":1074},[1053,10708,10710,10712,10714,10716,10718,10721,10723,10725,10727,10730,10732],{"class":1055,"line":10709},146,[1053,10711,7878],{"class":1070},[1053,10713,1195],{"class":1074},[1053,10715,7883],{"class":1074},[1053,10717,1247],{"class":1246},[1053,10719,10720],{"class":1250},"from_person",[1053,10722,1247],{"class":1246},[1053,10724,1300],{"class":1074},[1053,10726,2175],{"class":1246},[1053,10728,10729],{"class":1250},"to_person",[1053,10731,1247],{"class":1246},[1053,10733,7911],{"class":1074},[1053,10735,10737],{"class":1055,"line":10736},147,[1053,10738,1186],{"class":1070},[1053,10740,10742,10744,10746,10748,10750],{"class":1055,"line":10741},148,[1053,10743,1651],{"class":1146},[1053,10745,1655],{"class":1654},[1053,10747,1154],{"class":1074},[1053,10749,1661],{"class":1660},[1053,10751,1166],{"class":1074},[1053,10753,10755,10758,10760,10762,10765,10767,10770,10772,10774,10777,10779,10781,10784],{"class":1055,"line":10754},149,[1053,10756,10757],{"class":1070},"        status ",[1053,10759,1195],{"class":1074},[1053,10761,2175],{"class":1246},[1053,10763,10764],{"class":1250},"confirmed",[1053,10766,1247],{"class":1246},[1053,10768,10769],{"class":1066}," if",[1053,10771,1737],{"class":1682},[1053,10773,1075],{"class":1074},[1053,10775,10776],{"class":1687},"is_confirmed",[1053,10778,9430],{"class":1066},[1053,10780,2175],{"class":1246},[1053,10782,10783],{"class":1250},"pending",[1053,10785,1254],{"class":1246},[1053,10787,10789,10791,10793,10795,10797,10799,10801,10803,10805,10808,10810,10812,10814,10816,10818,10820,10822,10824,10826],{"class":1055,"line":10788},150,[1053,10790,1669],{"class":1066},[1053,10792,1672],{"class":1146},[1053,10794,1247],{"class":1250},[1053,10796,1679],{"class":1678},[1053,10798,1661],{"class":1682},[1053,10800,1075],{"class":1074},[1053,10802,10720],{"class":1687},[1053,10804,1696],{"class":1678},[1053,10806,10807],{"class":1250}," -> ",[1053,10809,1679],{"class":1678},[1053,10811,1661],{"class":1682},[1053,10813,1075],{"class":1074},[1053,10815,10729],{"class":1687},[1053,10817,1696],{"class":1678},[1053,10819,1913],{"class":1250},[1053,10821,1679],{"class":1678},[1053,10823,4426],{"class":1070},[1053,10825,1696],{"class":1678},[1053,10827,7990],{"class":1250},[1026,10829,10830],{},"Understanding Django relationships enables you to model complex real-world data structures efficiently while maintaining data integrity and providing intuitive APIs for accessing related data.",[10832,10833,10834],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s6DHA, html code.shiki .s6DHA{--shiki-light:#6182B8;--shiki-default:#A65E2B;--shiki-dark:#C99076}",{"title":1048,"searchDepth":1056,"depth":1063,"links":10836},[10837,10841,10845],{"id":1032,"depth":1063,"text":1033,"children":10838},[10839,10840],{"id":1040,"depth":1087,"text":1041},{"id":2230,"depth":1087,"text":2231},{"id":3348,"depth":1063,"text":3349,"children":10842},[10843,10844],{"id":3355,"depth":1087,"text":3356},{"id":5123,"depth":1087,"text":5124},{"id":6461,"depth":1063,"text":6462,"children":10846},[10847,10848,10849],{"id":6468,"depth":1087,"text":6469},{"id":6995,"depth":1087,"text":6996},{"id":8602,"depth":1087,"text":8603},"md",null,{},{"title":268,"description":1028},"vRhC9JFCS4gUmzxep9A0yGuX6MHW7fjB5TW-9VFIkJY",[10856,10858],{"title":264,"path":265,"stem":266,"description":10857,"children":-1},"Django model fields are the building blocks of your data structure. Each field type corresponds to a specific database column type and provides validation, conversion, and rendering capabilities. Understanding field options and customization is crucial for creating robust data models.",{"title":272,"path":273,"stem":274,"description":10859,"children":-1},"Real-world applications require sophisticated relationship patterns to model complex business logic. This section provides comprehensive examples of common relationship patterns you'll encounter in Django applications.",1772474917450]