[{"data":1,"prerenderedAt":10571},["ShallowReactive",2],{"navigation":3,"/models-and-databases":1016,"/models-and-databases-surround":10566},[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":254,"body":1018,"description":1028,"extension":10561,"links":10562,"meta":10563,"navigation":1186,"path":255,"seo":10564,"stem":256,"__hash__":10565},"docs/07.models-and-databases/01.index.md",{"type":1019,"value":1020,"toc":10543},"minimark",[1021,1025,1029,1034,1037,1042,1069,1073,1077,3542,3546,3550,5744,5748,5752,6493,6497,7544,7548,7552,10536,10539],[1022,1023,254],"h1",{"id":1024},"models-and-databases",[1026,1027,1028],"p",{},"Django's Object-Relational Mapping (ORM) system provides a powerful abstraction layer between your Python code and the database. This chapter covers everything from basic model definition to advanced database operations, query optimization, and working with multiple databases.",[1030,1031,1033],"h2",{"id":1032},"what-are-django-models","What Are Django Models?",[1026,1035,1036],{},"Django models are Python classes that define the structure and behavior of your application's data. Each model represents a database table, and each attribute of the model represents a database field. The Django ORM handles the translation between Python objects and database records automatically.",[1038,1039,1041],"h3",{"id":1040},"key-benefits-of-django-models","Key Benefits of Django Models",[1026,1043,1044,1048,1049,1052,1053,1056,1057,1060,1061,1064,1065,1068],{},[1045,1046,1047],"strong",{},"Database Abstraction",": Write database-agnostic code that works across different database engines\n",[1045,1050,1051],{},"Automatic Schema Generation",": Django creates and manages database tables based on your model definitions\n",[1045,1054,1055],{},"Query Interface",": Intuitive Python API for database operations without writing SQL\n",[1045,1058,1059],{},"Data Validation",": Built-in field validation and custom validation methods\n",[1045,1062,1063],{},"Relationship Management",": Elegant handling of foreign keys and many-to-many relationships\n",[1045,1066,1067],{},"Migration System",": Automatic schema evolution and version control for database changes",[1030,1070,1072],{"id":1071},"basic-model-structure","Basic Model Structure",[1038,1074,1076],{"id":1075},"simple-blog-model","Simple Blog Model",[1078,1079,1084],"pre",{"className":1080,"code":1081,"language":1082,"meta":1083,"style":1083},"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.urls import reverse\nfrom django.utils import timezone\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    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        verbose_name_plural = \"Categories\"\n        ordering = ['name']\n    \n    def __str__(self):\n        return self.name\n    \n    def get_absolute_url(self):\n        return reverse('category_detail', kwargs={'slug': self.slug})\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    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts')\n    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True)\n    content = models.TextField()\n    excerpt = models.TextField(max_length=300, blank=True)\n    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')\n    featured_image = models.ImageField(upload_to='posts/', blank=True, null=True)\n    tags = models.ManyToManyField('Tag', blank=True)\n    \n    # Timestamps\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    # SEO fields\n    meta_title = models.CharField(max_length=60, blank=True)\n    meta_description = models.CharField(max_length=160, blank=True)\n    \n    # Statistics\n    view_count = models.PositiveIntegerField(default=0)\n    like_count = models.PositiveIntegerField(default=0)\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    \n    def get_absolute_url(self):\n        return reverse('post_detail', kwargs={'slug': self.slug})\n    \n    def save(self, *args, **kwargs):\n        # Auto-set published_at when status changes to published\n        if self.status == 'published' and not self.published_at:\n            self.published_at = timezone.now()\n        \n        # Generate excerpt if not provided\n        if not self.excerpt and self.content:\n            self.excerpt = self.content[:297] + '...' if len(self.content) > 300 else self.content\n        \n        super().save(*args, **kwargs)\n    \n    @property\n    def is_published(self):\n        return self.status == 'published' and self.published_at \u003C= timezone.now()\n    \n    def get_reading_time(self):\n        \"\"\"Calculate estimated reading time in minutes\"\"\"\n        word_count = len(self.content.split())\n        return max(1, word_count // 200)  # Assume 200 words per minute\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    class Meta:\n        ordering = ['name']\n    \n    def __str__(self):\n        return self.name\n    \n    def get_absolute_url(self):\n        return reverse('tag_detail', kwargs={'slug': self.slug})\n\nclass Comment(models.Model):\n    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')\n    author = models.ForeignKey(User, on_delete=models.CASCADE)\n    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='replies')\n    content = models.TextField()\n    is_approved = models.BooleanField(default=False)\n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n    \n    class Meta:\n        ordering = ['created_at']\n        indexes = [\n            models.Index(fields=['post', 'is_approved']),\n            models.Index(fields=['author', 'created_at']),\n        ]\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","python","",[1085,1086,1087,1096,1120,1147,1164,1181,1188,1214,1259,1292,1318,1344,1350,1362,1381,1403,1408,1426,1442,1447,1462,1506,1511,1529,1541,1567,1590,1613,1619,1624,1649,1680,1731,1783,1800,1833,1882,1929,1963,1968,1974,1997,2022,2055,2060,2066,2099,2132,2137,2143,2170,2194,2199,2208,2226,2236,2274,2306,2338,2344,2349,2362,2374,2379,2392,2430,2435,2467,2473,2508,2530,2536,2542,2567,2636,2641,2669,2674,2683,2697,2735,2740,2754,2768,2794,2823,2828,2846,2878,2909,2950,2955,2964,2981,2986,2999,3010,3015,3028,3066,3071,3089,3135,3166,3231,3246,3272,3295,3318,3323,3332,3350,3359,3392,3423,3428,3433,3446,3496,3501,3508,3522],"code",{"__ignoreMap":1083},[1088,1089,1092],"span",{"class":1090,"line":1091},"line",1,[1088,1093,1095],{"class":1094},"s9Tkl","# models.py\n",[1088,1097,1099,1103,1107,1111,1114,1117],{"class":1090,"line":1098},2,[1088,1100,1102],{"class":1101},"siDh9","from",[1088,1104,1106],{"class":1105},"sftqT"," django",[1088,1108,1110],{"class":1109},"soVBu",".",[1088,1112,1113],{"class":1105},"db ",[1088,1115,1116],{"class":1101},"import",[1088,1118,1119],{"class":1105}," models\n",[1088,1121,1123,1125,1127,1129,1132,1134,1137,1139,1142,1144],{"class":1090,"line":1122},3,[1088,1124,1102],{"class":1101},[1088,1126,1106],{"class":1105},[1088,1128,1110],{"class":1109},[1088,1130,1131],{"class":1105},"contrib",[1088,1133,1110],{"class":1109},[1088,1135,1136],{"class":1105},"auth",[1088,1138,1110],{"class":1109},[1088,1140,1141],{"class":1105},"models ",[1088,1143,1116],{"class":1101},[1088,1145,1146],{"class":1105}," User\n",[1088,1148,1150,1152,1154,1156,1159,1161],{"class":1090,"line":1149},4,[1088,1151,1102],{"class":1101},[1088,1153,1106],{"class":1105},[1088,1155,1110],{"class":1109},[1088,1157,1158],{"class":1105},"urls ",[1088,1160,1116],{"class":1101},[1088,1162,1163],{"class":1105}," reverse\n",[1088,1165,1167,1169,1171,1173,1176,1178],{"class":1090,"line":1166},5,[1088,1168,1102],{"class":1101},[1088,1170,1106],{"class":1105},[1088,1172,1110],{"class":1109},[1088,1174,1175],{"class":1105},"utils ",[1088,1177,1116],{"class":1101},[1088,1179,1180],{"class":1105}," timezone\n",[1088,1182,1184],{"class":1090,"line":1183},6,[1088,1185,1187],{"emptyLinePlaceholder":1186},true,"\n",[1088,1189,1191,1195,1199,1202,1206,1208,1211],{"class":1090,"line":1190},7,[1088,1192,1194],{"class":1193},"s5Kfy","class",[1088,1196,1198],{"class":1197},"sD-vU"," Category",[1088,1200,1201],{"class":1109},"(",[1088,1203,1205],{"class":1204},"sYn-s","models",[1088,1207,1110],{"class":1109},[1088,1209,1210],{"class":1204},"Model",[1088,1212,1213],{"class":1109},"):\n",[1088,1215,1217,1220,1223,1226,1228,1232,1234,1238,1240,1244,1247,1250,1252,1256],{"class":1090,"line":1216},8,[1088,1218,1219],{"class":1105},"    name ",[1088,1221,1222],{"class":1109},"=",[1088,1224,1225],{"class":1105}," models",[1088,1227,1110],{"class":1109},[1088,1229,1231],{"class":1230},"siWMO","CharField",[1088,1233,1201],{"class":1109},[1088,1235,1237],{"class":1236},"sqOPj","max_length",[1088,1239,1222],{"class":1109},[1088,1241,1243],{"class":1242},"s7CZa","100",[1088,1245,1246],{"class":1109},",",[1088,1248,1249],{"class":1236}," unique",[1088,1251,1222],{"class":1109},[1088,1253,1255],{"class":1254},"s8XtY","True",[1088,1257,1258],{"class":1109},")\n",[1088,1260,1262,1265,1267,1269,1271,1274,1276,1278,1280,1282,1284,1286,1288,1290],{"class":1090,"line":1261},9,[1088,1263,1264],{"class":1105},"    slug ",[1088,1266,1222],{"class":1109},[1088,1268,1225],{"class":1105},[1088,1270,1110],{"class":1109},[1088,1272,1273],{"class":1230},"SlugField",[1088,1275,1201],{"class":1109},[1088,1277,1237],{"class":1236},[1088,1279,1222],{"class":1109},[1088,1281,1243],{"class":1242},[1088,1283,1246],{"class":1109},[1088,1285,1249],{"class":1236},[1088,1287,1222],{"class":1109},[1088,1289,1255],{"class":1254},[1088,1291,1258],{"class":1109},[1088,1293,1295,1298,1300,1302,1304,1307,1309,1312,1314,1316],{"class":1090,"line":1294},10,[1088,1296,1297],{"class":1105},"    description ",[1088,1299,1222],{"class":1109},[1088,1301,1225],{"class":1105},[1088,1303,1110],{"class":1109},[1088,1305,1306],{"class":1230},"TextField",[1088,1308,1201],{"class":1109},[1088,1310,1311],{"class":1236},"blank",[1088,1313,1222],{"class":1109},[1088,1315,1255],{"class":1254},[1088,1317,1258],{"class":1109},[1088,1319,1321,1324,1326,1328,1330,1333,1335,1338,1340,1342],{"class":1090,"line":1320},11,[1088,1322,1323],{"class":1105},"    created_at ",[1088,1325,1222],{"class":1109},[1088,1327,1225],{"class":1105},[1088,1329,1110],{"class":1109},[1088,1331,1332],{"class":1230},"DateTimeField",[1088,1334,1201],{"class":1109},[1088,1336,1337],{"class":1236},"auto_now_add",[1088,1339,1222],{"class":1109},[1088,1341,1255],{"class":1254},[1088,1343,1258],{"class":1109},[1088,1345,1347],{"class":1090,"line":1346},12,[1088,1348,1349],{"class":1105},"    \n",[1088,1351,1353,1356,1359],{"class":1090,"line":1352},13,[1088,1354,1355],{"class":1193},"    class",[1088,1357,1358],{"class":1197}," Meta",[1088,1360,1361],{"class":1109},":\n",[1088,1363,1365,1368,1370,1374,1378],{"class":1090,"line":1364},14,[1088,1366,1367],{"class":1105},"        verbose_name_plural ",[1088,1369,1222],{"class":1109},[1088,1371,1373],{"class":1372},"sbYkP"," \"",[1088,1375,1377],{"class":1376},"sTbE_","Categories",[1088,1379,1380],{"class":1372},"\"\n",[1088,1382,1384,1387,1389,1392,1395,1398,1400],{"class":1090,"line":1383},15,[1088,1385,1386],{"class":1105},"        ordering ",[1088,1388,1222],{"class":1109},[1088,1390,1391],{"class":1109}," [",[1088,1393,1394],{"class":1372},"'",[1088,1396,1397],{"class":1376},"name",[1088,1399,1394],{"class":1372},[1088,1401,1402],{"class":1109},"]\n",[1088,1404,1406],{"class":1090,"line":1405},16,[1088,1407,1349],{"class":1105},[1088,1409,1411,1414,1418,1420,1424],{"class":1090,"line":1410},17,[1088,1412,1413],{"class":1193},"    def",[1088,1415,1417],{"class":1416},"sJdAF"," __str__",[1088,1419,1201],{"class":1109},[1088,1421,1423],{"class":1422},"sRjD_","self",[1088,1425,1213],{"class":1109},[1088,1427,1429,1432,1436,1438],{"class":1090,"line":1428},18,[1088,1430,1431],{"class":1101},"        return",[1088,1433,1435],{"class":1434},"se3Ec"," self",[1088,1437,1110],{"class":1109},[1088,1439,1441],{"class":1440},"sBPpx","name\n",[1088,1443,1445],{"class":1090,"line":1444},19,[1088,1446,1349],{"class":1105},[1088,1448,1450,1452,1456,1458,1460],{"class":1090,"line":1449},20,[1088,1451,1413],{"class":1193},[1088,1453,1455],{"class":1454},"sljsM"," get_absolute_url",[1088,1457,1201],{"class":1109},[1088,1459,1423],{"class":1422},[1088,1461,1213],{"class":1109},[1088,1463,1465,1467,1470,1472,1474,1477,1479,1481,1484,1487,1489,1492,1494,1497,1499,1501,1503],{"class":1090,"line":1464},21,[1088,1466,1431],{"class":1101},[1088,1468,1469],{"class":1230}," reverse",[1088,1471,1201],{"class":1109},[1088,1473,1394],{"class":1372},[1088,1475,1476],{"class":1376},"category_detail",[1088,1478,1394],{"class":1372},[1088,1480,1246],{"class":1109},[1088,1482,1483],{"class":1236}," kwargs",[1088,1485,1486],{"class":1109},"={",[1088,1488,1394],{"class":1372},[1088,1490,1491],{"class":1376},"slug",[1088,1493,1394],{"class":1372},[1088,1495,1496],{"class":1109},":",[1088,1498,1435],{"class":1434},[1088,1500,1110],{"class":1109},[1088,1502,1491],{"class":1440},[1088,1504,1505],{"class":1109},"})\n",[1088,1507,1509],{"class":1090,"line":1508},22,[1088,1510,1187],{"emptyLinePlaceholder":1186},[1088,1512,1514,1516,1519,1521,1523,1525,1527],{"class":1090,"line":1513},23,[1088,1515,1194],{"class":1193},[1088,1517,1518],{"class":1197}," Post",[1088,1520,1201],{"class":1109},[1088,1522,1205],{"class":1204},[1088,1524,1110],{"class":1109},[1088,1526,1210],{"class":1204},[1088,1528,1213],{"class":1109},[1088,1530,1532,1535,1538],{"class":1090,"line":1531},24,[1088,1533,1534],{"class":1434},"    STATUS_CHOICES",[1088,1536,1537],{"class":1109}," =",[1088,1539,1540],{"class":1109}," [\n",[1088,1542,1544,1547,1549,1552,1554,1556,1559,1562,1564],{"class":1090,"line":1543},25,[1088,1545,1546],{"class":1109},"        (",[1088,1548,1394],{"class":1372},[1088,1550,1551],{"class":1376},"draft",[1088,1553,1394],{"class":1372},[1088,1555,1246],{"class":1109},[1088,1557,1558],{"class":1372}," '",[1088,1560,1561],{"class":1376},"Draft",[1088,1563,1394],{"class":1372},[1088,1565,1566],{"class":1109},"),\n",[1088,1568,1570,1572,1574,1577,1579,1581,1583,1586,1588],{"class":1090,"line":1569},26,[1088,1571,1546],{"class":1109},[1088,1573,1394],{"class":1372},[1088,1575,1576],{"class":1376},"published",[1088,1578,1394],{"class":1372},[1088,1580,1246],{"class":1109},[1088,1582,1558],{"class":1372},[1088,1584,1585],{"class":1376},"Published",[1088,1587,1394],{"class":1372},[1088,1589,1566],{"class":1109},[1088,1591,1593,1595,1597,1600,1602,1604,1606,1609,1611],{"class":1090,"line":1592},27,[1088,1594,1546],{"class":1109},[1088,1596,1394],{"class":1372},[1088,1598,1599],{"class":1376},"archived",[1088,1601,1394],{"class":1372},[1088,1603,1246],{"class":1109},[1088,1605,1558],{"class":1372},[1088,1607,1608],{"class":1376},"Archived",[1088,1610,1394],{"class":1372},[1088,1612,1566],{"class":1109},[1088,1614,1616],{"class":1090,"line":1615},28,[1088,1617,1618],{"class":1109},"    ]\n",[1088,1620,1622],{"class":1090,"line":1621},29,[1088,1623,1349],{"class":1105},[1088,1625,1627,1630,1632,1634,1636,1638,1640,1642,1644,1647],{"class":1090,"line":1626},30,[1088,1628,1629],{"class":1105},"    title ",[1088,1631,1222],{"class":1109},[1088,1633,1225],{"class":1105},[1088,1635,1110],{"class":1109},[1088,1637,1231],{"class":1230},[1088,1639,1201],{"class":1109},[1088,1641,1237],{"class":1236},[1088,1643,1222],{"class":1109},[1088,1645,1646],{"class":1242},"200",[1088,1648,1258],{"class":1109},[1088,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678],{"class":1090,"line":1651},31,[1088,1653,1264],{"class":1105},[1088,1655,1222],{"class":1109},[1088,1657,1225],{"class":1105},[1088,1659,1110],{"class":1109},[1088,1661,1273],{"class":1230},[1088,1663,1201],{"class":1109},[1088,1665,1237],{"class":1236},[1088,1667,1222],{"class":1109},[1088,1669,1646],{"class":1242},[1088,1671,1246],{"class":1109},[1088,1673,1249],{"class":1236},[1088,1675,1222],{"class":1109},[1088,1677,1255],{"class":1254},[1088,1679,1258],{"class":1109},[1088,1681,1683,1686,1688,1690,1692,1695,1697,1700,1702,1705,1707,1709,1711,1715,1717,1720,1722,1724,1727,1729],{"class":1090,"line":1682},32,[1088,1684,1685],{"class":1105},"    author ",[1088,1687,1222],{"class":1109},[1088,1689,1225],{"class":1105},[1088,1691,1110],{"class":1109},[1088,1693,1694],{"class":1230},"ForeignKey",[1088,1696,1201],{"class":1109},[1088,1698,1699],{"class":1230},"User",[1088,1701,1246],{"class":1109},[1088,1703,1704],{"class":1236}," on_delete",[1088,1706,1222],{"class":1109},[1088,1708,1205],{"class":1230},[1088,1710,1110],{"class":1109},[1088,1712,1714],{"class":1713},"sFGJz","CASCADE",[1088,1716,1246],{"class":1109},[1088,1718,1719],{"class":1236}," related_name",[1088,1721,1222],{"class":1109},[1088,1723,1394],{"class":1372},[1088,1725,1726],{"class":1376},"posts",[1088,1728,1394],{"class":1372},[1088,1730,1258],{"class":1109},[1088,1732,1734,1737,1739,1741,1743,1745,1747,1750,1752,1754,1756,1758,1760,1763,1765,1768,1770,1772,1774,1777,1779,1781],{"class":1090,"line":1733},33,[1088,1735,1736],{"class":1105},"    category ",[1088,1738,1222],{"class":1109},[1088,1740,1225],{"class":1105},[1088,1742,1110],{"class":1109},[1088,1744,1694],{"class":1230},[1088,1746,1201],{"class":1109},[1088,1748,1749],{"class":1230},"Category",[1088,1751,1246],{"class":1109},[1088,1753,1704],{"class":1236},[1088,1755,1222],{"class":1109},[1088,1757,1205],{"class":1230},[1088,1759,1110],{"class":1109},[1088,1761,1762],{"class":1713},"SET_NULL",[1088,1764,1246],{"class":1109},[1088,1766,1767],{"class":1236}," null",[1088,1769,1222],{"class":1109},[1088,1771,1255],{"class":1254},[1088,1773,1246],{"class":1109},[1088,1775,1776],{"class":1236}," blank",[1088,1778,1222],{"class":1109},[1088,1780,1255],{"class":1254},[1088,1782,1258],{"class":1109},[1088,1784,1786,1789,1791,1793,1795,1797],{"class":1090,"line":1785},34,[1088,1787,1788],{"class":1105},"    content ",[1088,1790,1222],{"class":1109},[1088,1792,1225],{"class":1105},[1088,1794,1110],{"class":1109},[1088,1796,1306],{"class":1230},[1088,1798,1799],{"class":1109},"()\n",[1088,1801,1803,1806,1808,1810,1812,1814,1816,1818,1820,1823,1825,1827,1829,1831],{"class":1090,"line":1802},35,[1088,1804,1805],{"class":1105},"    excerpt ",[1088,1807,1222],{"class":1109},[1088,1809,1225],{"class":1105},[1088,1811,1110],{"class":1109},[1088,1813,1306],{"class":1230},[1088,1815,1201],{"class":1109},[1088,1817,1237],{"class":1236},[1088,1819,1222],{"class":1109},[1088,1821,1822],{"class":1242},"300",[1088,1824,1246],{"class":1109},[1088,1826,1776],{"class":1236},[1088,1828,1222],{"class":1109},[1088,1830,1255],{"class":1254},[1088,1832,1258],{"class":1109},[1088,1834,1836,1839,1841,1843,1845,1847,1849,1851,1853,1856,1858,1861,1863,1867,1869,1872,1874,1876,1878,1880],{"class":1090,"line":1835},36,[1088,1837,1838],{"class":1105},"    status ",[1088,1840,1222],{"class":1109},[1088,1842,1225],{"class":1105},[1088,1844,1110],{"class":1109},[1088,1846,1231],{"class":1230},[1088,1848,1201],{"class":1109},[1088,1850,1237],{"class":1236},[1088,1852,1222],{"class":1109},[1088,1854,1855],{"class":1242},"10",[1088,1857,1246],{"class":1109},[1088,1859,1860],{"class":1236}," choices",[1088,1862,1222],{"class":1109},[1088,1864,1866],{"class":1865},"s6DHA","STATUS_CHOICES",[1088,1868,1246],{"class":1109},[1088,1870,1871],{"class":1236}," default",[1088,1873,1222],{"class":1109},[1088,1875,1394],{"class":1372},[1088,1877,1551],{"class":1376},[1088,1879,1394],{"class":1372},[1088,1881,1258],{"class":1109},[1088,1883,1885,1888,1890,1892,1894,1897,1899,1902,1904,1906,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927],{"class":1090,"line":1884},37,[1088,1886,1887],{"class":1105},"    featured_image ",[1088,1889,1222],{"class":1109},[1088,1891,1225],{"class":1105},[1088,1893,1110],{"class":1109},[1088,1895,1896],{"class":1230},"ImageField",[1088,1898,1201],{"class":1109},[1088,1900,1901],{"class":1236},"upload_to",[1088,1903,1222],{"class":1109},[1088,1905,1394],{"class":1372},[1088,1907,1908],{"class":1376},"posts/",[1088,1910,1394],{"class":1372},[1088,1912,1246],{"class":1109},[1088,1914,1776],{"class":1236},[1088,1916,1222],{"class":1109},[1088,1918,1255],{"class":1254},[1088,1920,1246],{"class":1109},[1088,1922,1767],{"class":1236},[1088,1924,1222],{"class":1109},[1088,1926,1255],{"class":1254},[1088,1928,1258],{"class":1109},[1088,1930,1932,1935,1937,1939,1941,1944,1946,1948,1951,1953,1955,1957,1959,1961],{"class":1090,"line":1931},38,[1088,1933,1934],{"class":1105},"    tags ",[1088,1936,1222],{"class":1109},[1088,1938,1225],{"class":1105},[1088,1940,1110],{"class":1109},[1088,1942,1943],{"class":1230},"ManyToManyField",[1088,1945,1201],{"class":1109},[1088,1947,1394],{"class":1372},[1088,1949,1950],{"class":1376},"Tag",[1088,1952,1394],{"class":1372},[1088,1954,1246],{"class":1109},[1088,1956,1776],{"class":1236},[1088,1958,1222],{"class":1109},[1088,1960,1255],{"class":1254},[1088,1962,1258],{"class":1109},[1088,1964,1966],{"class":1090,"line":1965},39,[1088,1967,1349],{"class":1105},[1088,1969,1971],{"class":1090,"line":1970},40,[1088,1972,1973],{"class":1094},"    # Timestamps\n",[1088,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995],{"class":1090,"line":1976},41,[1088,1978,1323],{"class":1105},[1088,1980,1222],{"class":1109},[1088,1982,1225],{"class":1105},[1088,1984,1110],{"class":1109},[1088,1986,1332],{"class":1230},[1088,1988,1201],{"class":1109},[1088,1990,1337],{"class":1236},[1088,1992,1222],{"class":1109},[1088,1994,1255],{"class":1254},[1088,1996,1258],{"class":1109},[1088,1998,2000,2003,2005,2007,2009,2011,2013,2016,2018,2020],{"class":1090,"line":1999},42,[1088,2001,2002],{"class":1105},"    updated_at ",[1088,2004,1222],{"class":1109},[1088,2006,1225],{"class":1105},[1088,2008,1110],{"class":1109},[1088,2010,1332],{"class":1230},[1088,2012,1201],{"class":1109},[1088,2014,2015],{"class":1236},"auto_now",[1088,2017,1222],{"class":1109},[1088,2019,1255],{"class":1254},[1088,2021,1258],{"class":1109},[1088,2023,2025,2028,2030,2032,2034,2036,2038,2041,2043,2045,2047,2049,2051,2053],{"class":1090,"line":2024},43,[1088,2026,2027],{"class":1105},"    published_at ",[1088,2029,1222],{"class":1109},[1088,2031,1225],{"class":1105},[1088,2033,1110],{"class":1109},[1088,2035,1332],{"class":1230},[1088,2037,1201],{"class":1109},[1088,2039,2040],{"class":1236},"null",[1088,2042,1222],{"class":1109},[1088,2044,1255],{"class":1254},[1088,2046,1246],{"class":1109},[1088,2048,1776],{"class":1236},[1088,2050,1222],{"class":1109},[1088,2052,1255],{"class":1254},[1088,2054,1258],{"class":1109},[1088,2056,2058],{"class":1090,"line":2057},44,[1088,2059,1349],{"class":1105},[1088,2061,2063],{"class":1090,"line":2062},45,[1088,2064,2065],{"class":1094},"    # SEO fields\n",[1088,2067,2069,2072,2074,2076,2078,2080,2082,2084,2086,2089,2091,2093,2095,2097],{"class":1090,"line":2068},46,[1088,2070,2071],{"class":1105},"    meta_title ",[1088,2073,1222],{"class":1109},[1088,2075,1225],{"class":1105},[1088,2077,1110],{"class":1109},[1088,2079,1231],{"class":1230},[1088,2081,1201],{"class":1109},[1088,2083,1237],{"class":1236},[1088,2085,1222],{"class":1109},[1088,2087,2088],{"class":1242},"60",[1088,2090,1246],{"class":1109},[1088,2092,1776],{"class":1236},[1088,2094,1222],{"class":1109},[1088,2096,1255],{"class":1254},[1088,2098,1258],{"class":1109},[1088,2100,2102,2105,2107,2109,2111,2113,2115,2117,2119,2122,2124,2126,2128,2130],{"class":1090,"line":2101},47,[1088,2103,2104],{"class":1105},"    meta_description ",[1088,2106,1222],{"class":1109},[1088,2108,1225],{"class":1105},[1088,2110,1110],{"class":1109},[1088,2112,1231],{"class":1230},[1088,2114,1201],{"class":1109},[1088,2116,1237],{"class":1236},[1088,2118,1222],{"class":1109},[1088,2120,2121],{"class":1242},"160",[1088,2123,1246],{"class":1109},[1088,2125,1776],{"class":1236},[1088,2127,1222],{"class":1109},[1088,2129,1255],{"class":1254},[1088,2131,1258],{"class":1109},[1088,2133,2135],{"class":1090,"line":2134},48,[1088,2136,1349],{"class":1105},[1088,2138,2140],{"class":1090,"line":2139},49,[1088,2141,2142],{"class":1094},"    # Statistics\n",[1088,2144,2146,2149,2151,2153,2155,2158,2160,2163,2165,2168],{"class":1090,"line":2145},50,[1088,2147,2148],{"class":1105},"    view_count ",[1088,2150,1222],{"class":1109},[1088,2152,1225],{"class":1105},[1088,2154,1110],{"class":1109},[1088,2156,2157],{"class":1230},"PositiveIntegerField",[1088,2159,1201],{"class":1109},[1088,2161,2162],{"class":1236},"default",[1088,2164,1222],{"class":1109},[1088,2166,2167],{"class":1242},"0",[1088,2169,1258],{"class":1109},[1088,2171,2173,2176,2178,2180,2182,2184,2186,2188,2190,2192],{"class":1090,"line":2172},51,[1088,2174,2175],{"class":1105},"    like_count ",[1088,2177,1222],{"class":1109},[1088,2179,1225],{"class":1105},[1088,2181,1110],{"class":1109},[1088,2183,2157],{"class":1230},[1088,2185,1201],{"class":1109},[1088,2187,2162],{"class":1236},[1088,2189,1222],{"class":1109},[1088,2191,2167],{"class":1242},[1088,2193,1258],{"class":1109},[1088,2195,2197],{"class":1090,"line":2196},52,[1088,2198,1349],{"class":1105},[1088,2200,2202,2204,2206],{"class":1090,"line":2201},53,[1088,2203,1355],{"class":1193},[1088,2205,1358],{"class":1197},[1088,2207,1361],{"class":1109},[1088,2209,2211,2213,2215,2217,2219,2222,2224],{"class":1090,"line":2210},54,[1088,2212,1386],{"class":1105},[1088,2214,1222],{"class":1109},[1088,2216,1391],{"class":1109},[1088,2218,1394],{"class":1372},[1088,2220,2221],{"class":1376},"-created_at",[1088,2223,1394],{"class":1372},[1088,2225,1402],{"class":1109},[1088,2227,2229,2232,2234],{"class":1090,"line":2228},55,[1088,2230,2231],{"class":1105},"        indexes ",[1088,2233,1222],{"class":1109},[1088,2235,1540],{"class":1109},[1088,2237,2239,2242,2244,2247,2249,2252,2255,2257,2260,2262,2264,2266,2269,2271],{"class":1090,"line":2238},56,[1088,2240,2241],{"class":1105},"            models",[1088,2243,1110],{"class":1109},[1088,2245,2246],{"class":1230},"Index",[1088,2248,1201],{"class":1109},[1088,2250,2251],{"class":1236},"fields",[1088,2253,2254],{"class":1109},"=[",[1088,2256,1394],{"class":1372},[1088,2258,2259],{"class":1376},"status",[1088,2261,1394],{"class":1372},[1088,2263,1246],{"class":1109},[1088,2265,1558],{"class":1372},[1088,2267,2268],{"class":1376},"published_at",[1088,2270,1394],{"class":1372},[1088,2272,2273],{"class":1109},"]),\n",[1088,2275,2277,2279,2281,2283,2285,2287,2289,2291,2294,2296,2298,2300,2302,2304],{"class":1090,"line":2276},57,[1088,2278,2241],{"class":1105},[1088,2280,1110],{"class":1109},[1088,2282,2246],{"class":1230},[1088,2284,1201],{"class":1109},[1088,2286,2251],{"class":1236},[1088,2288,2254],{"class":1109},[1088,2290,1394],{"class":1372},[1088,2292,2293],{"class":1376},"author",[1088,2295,1394],{"class":1372},[1088,2297,1246],{"class":1109},[1088,2299,1558],{"class":1372},[1088,2301,2259],{"class":1376},[1088,2303,1394],{"class":1372},[1088,2305,2273],{"class":1109},[1088,2307,2309,2311,2313,2315,2317,2319,2321,2323,2326,2328,2330,2332,2334,2336],{"class":1090,"line":2308},58,[1088,2310,2241],{"class":1105},[1088,2312,1110],{"class":1109},[1088,2314,2246],{"class":1230},[1088,2316,1201],{"class":1109},[1088,2318,2251],{"class":1236},[1088,2320,2254],{"class":1109},[1088,2322,1394],{"class":1372},[1088,2324,2325],{"class":1376},"category",[1088,2327,1394],{"class":1372},[1088,2329,1246],{"class":1109},[1088,2331,1558],{"class":1372},[1088,2333,2259],{"class":1376},[1088,2335,1394],{"class":1372},[1088,2337,2273],{"class":1109},[1088,2339,2341],{"class":1090,"line":2340},59,[1088,2342,2343],{"class":1109},"        ]\n",[1088,2345,2347],{"class":1090,"line":2346},60,[1088,2348,1349],{"class":1105},[1088,2350,2352,2354,2356,2358,2360],{"class":1090,"line":2351},61,[1088,2353,1413],{"class":1193},[1088,2355,1417],{"class":1416},[1088,2357,1201],{"class":1109},[1088,2359,1423],{"class":1422},[1088,2361,1213],{"class":1109},[1088,2363,2365,2367,2369,2371],{"class":1090,"line":2364},62,[1088,2366,1431],{"class":1101},[1088,2368,1435],{"class":1434},[1088,2370,1110],{"class":1109},[1088,2372,2373],{"class":1440},"title\n",[1088,2375,2377],{"class":1090,"line":2376},63,[1088,2378,1349],{"class":1105},[1088,2380,2382,2384,2386,2388,2390],{"class":1090,"line":2381},64,[1088,2383,1413],{"class":1193},[1088,2385,1455],{"class":1454},[1088,2387,1201],{"class":1109},[1088,2389,1423],{"class":1422},[1088,2391,1213],{"class":1109},[1088,2393,2395,2397,2399,2401,2403,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428],{"class":1090,"line":2394},65,[1088,2396,1431],{"class":1101},[1088,2398,1469],{"class":1230},[1088,2400,1201],{"class":1109},[1088,2402,1394],{"class":1372},[1088,2404,2405],{"class":1376},"post_detail",[1088,2407,1394],{"class":1372},[1088,2409,1246],{"class":1109},[1088,2411,1483],{"class":1236},[1088,2413,1486],{"class":1109},[1088,2415,1394],{"class":1372},[1088,2417,1491],{"class":1376},[1088,2419,1394],{"class":1372},[1088,2421,1496],{"class":1109},[1088,2423,1435],{"class":1434},[1088,2425,1110],{"class":1109},[1088,2427,1491],{"class":1440},[1088,2429,1505],{"class":1109},[1088,2431,2433],{"class":1090,"line":2432},66,[1088,2434,1349],{"class":1105},[1088,2436,2438,2440,2443,2445,2447,2449,2453,2457,2459,2462,2465],{"class":1090,"line":2437},67,[1088,2439,1413],{"class":1193},[1088,2441,2442],{"class":1454}," save",[1088,2444,1201],{"class":1109},[1088,2446,1423],{"class":1422},[1088,2448,1246],{"class":1109},[1088,2450,2452],{"class":2451},"sVsLi"," *",[1088,2454,2456],{"class":2455},"sCyAa","args",[1088,2458,1246],{"class":1109},[1088,2460,2461],{"class":2451}," **",[1088,2463,2464],{"class":2455},"kwargs",[1088,2466,1213],{"class":1109},[1088,2468,2470],{"class":1090,"line":2469},68,[1088,2471,2472],{"class":1094},"        # Auto-set published_at when status changes to published\n",[1088,2474,2476,2479,2481,2483,2485,2488,2490,2492,2494,2497,2500,2502,2504,2506],{"class":1090,"line":2475},69,[1088,2477,2478],{"class":1101},"        if",[1088,2480,1435],{"class":1434},[1088,2482,1110],{"class":1109},[1088,2484,2259],{"class":1440},[1088,2486,2487],{"class":2451}," ==",[1088,2489,1558],{"class":1372},[1088,2491,1576],{"class":1376},[1088,2493,1394],{"class":1372},[1088,2495,2496],{"class":2451}," and",[1088,2498,2499],{"class":2451}," not",[1088,2501,1435],{"class":1434},[1088,2503,1110],{"class":1109},[1088,2505,2268],{"class":1440},[1088,2507,1361],{"class":1109},[1088,2509,2511,2514,2516,2518,2520,2523,2525,2528],{"class":1090,"line":2510},70,[1088,2512,2513],{"class":1434},"            self",[1088,2515,1110],{"class":1109},[1088,2517,2268],{"class":1440},[1088,2519,1537],{"class":1109},[1088,2521,2522],{"class":1105}," timezone",[1088,2524,1110],{"class":1109},[1088,2526,2527],{"class":1230},"now",[1088,2529,1799],{"class":1109},[1088,2531,2533],{"class":1090,"line":2532},71,[1088,2534,2535],{"class":1105},"        \n",[1088,2537,2539],{"class":1090,"line":2538},72,[1088,2540,2541],{"class":1094},"        # Generate excerpt if not provided\n",[1088,2543,2545,2547,2549,2551,2553,2556,2558,2560,2562,2565],{"class":1090,"line":2544},73,[1088,2546,2478],{"class":1101},[1088,2548,2499],{"class":2451},[1088,2550,1435],{"class":1434},[1088,2552,1110],{"class":1109},[1088,2554,2555],{"class":1440},"excerpt",[1088,2557,2496],{"class":2451},[1088,2559,1435],{"class":1434},[1088,2561,1110],{"class":1109},[1088,2563,2564],{"class":1440},"content",[1088,2566,1361],{"class":1109},[1088,2568,2570,2572,2574,2576,2578,2580,2582,2584,2587,2590,2593,2596,2598,2601,2603,2606,2609,2611,2613,2615,2617,2620,2623,2626,2629,2631,2633],{"class":1090,"line":2569},74,[1088,2571,2513],{"class":1434},[1088,2573,1110],{"class":1109},[1088,2575,2555],{"class":1440},[1088,2577,1537],{"class":1109},[1088,2579,1435],{"class":1434},[1088,2581,1110],{"class":1109},[1088,2583,2564],{"class":1440},[1088,2585,2586],{"class":1109},"[:",[1088,2588,2589],{"class":1242},"297",[1088,2591,2592],{"class":1109},"]",[1088,2594,2595],{"class":2451}," +",[1088,2597,1558],{"class":1372},[1088,2599,2600],{"class":1376},"...",[1088,2602,1394],{"class":1372},[1088,2604,2605],{"class":1101}," if",[1088,2607,2608],{"class":1416}," len",[1088,2610,1201],{"class":1109},[1088,2612,1423],{"class":1434},[1088,2614,1110],{"class":1109},[1088,2616,2564],{"class":1440},[1088,2618,2619],{"class":1109},")",[1088,2621,2622],{"class":2451}," >",[1088,2624,2625],{"class":1242}," 300",[1088,2627,2628],{"class":1101}," else",[1088,2630,1435],{"class":1434},[1088,2632,1110],{"class":1109},[1088,2634,2635],{"class":1440},"content\n",[1088,2637,2639],{"class":1090,"line":2638},75,[1088,2640,2535],{"class":1105},[1088,2642,2644,2648,2651,2654,2656,2659,2661,2663,2665,2667],{"class":1090,"line":2643},76,[1088,2645,2647],{"class":2646},"sa2tF","        super",[1088,2649,2650],{"class":1109},"().",[1088,2652,2653],{"class":1230},"save",[1088,2655,1201],{"class":1109},[1088,2657,2658],{"class":2451},"*",[1088,2660,2456],{"class":1230},[1088,2662,1246],{"class":1109},[1088,2664,2461],{"class":2451},[1088,2666,2464],{"class":1230},[1088,2668,1258],{"class":1109},[1088,2670,2672],{"class":1090,"line":2671},77,[1088,2673,1349],{"class":1105},[1088,2675,2677,2680],{"class":1090,"line":2676},78,[1088,2678,2679],{"class":1109},"    @",[1088,2681,2682],{"class":2646},"property\n",[1088,2684,2686,2688,2691,2693,2695],{"class":1090,"line":2685},79,[1088,2687,1413],{"class":1193},[1088,2689,2690],{"class":1454}," is_published",[1088,2692,1201],{"class":1109},[1088,2694,1423],{"class":1422},[1088,2696,1213],{"class":1109},[1088,2698,2700,2702,2704,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2727,2729,2731,2733],{"class":1090,"line":2699},80,[1088,2701,1431],{"class":1101},[1088,2703,1435],{"class":1434},[1088,2705,1110],{"class":1109},[1088,2707,2259],{"class":1440},[1088,2709,2487],{"class":2451},[1088,2711,1558],{"class":1372},[1088,2713,1576],{"class":1376},[1088,2715,1394],{"class":1372},[1088,2717,2496],{"class":2451},[1088,2719,1435],{"class":1434},[1088,2721,1110],{"class":1109},[1088,2723,2268],{"class":1440},[1088,2725,2726],{"class":2451}," \u003C=",[1088,2728,2522],{"class":1105},[1088,2730,1110],{"class":1109},[1088,2732,2527],{"class":1230},[1088,2734,1799],{"class":1109},[1088,2736,2738],{"class":1090,"line":2737},81,[1088,2739,1349],{"class":1105},[1088,2741,2743,2745,2748,2750,2752],{"class":1090,"line":2742},82,[1088,2744,1413],{"class":1193},[1088,2746,2747],{"class":1454}," get_reading_time",[1088,2749,1201],{"class":1109},[1088,2751,1423],{"class":1422},[1088,2753,1213],{"class":1109},[1088,2755,2757,2761,2765],{"class":1090,"line":2756},83,[1088,2758,2760],{"class":2759},"sm7ve","        \"\"\"",[1088,2762,2764],{"class":2763},"sVyVU","Calculate estimated reading time in minutes",[1088,2766,2767],{"class":2759},"\"\"\"\n",[1088,2769,2771,2774,2776,2778,2780,2782,2784,2786,2788,2791],{"class":1090,"line":2770},84,[1088,2772,2773],{"class":1105},"        word_count ",[1088,2775,1222],{"class":1109},[1088,2777,2608],{"class":1416},[1088,2779,1201],{"class":1109},[1088,2781,1423],{"class":1434},[1088,2783,1110],{"class":1109},[1088,2785,2564],{"class":1440},[1088,2787,1110],{"class":1109},[1088,2789,2790],{"class":1230},"split",[1088,2792,2793],{"class":1109},"())\n",[1088,2795,2797,2799,2802,2804,2807,2809,2812,2815,2818,2820],{"class":1090,"line":2796},85,[1088,2798,1431],{"class":1101},[1088,2800,2801],{"class":1416}," max",[1088,2803,1201],{"class":1109},[1088,2805,2806],{"class":1242},"1",[1088,2808,1246],{"class":1109},[1088,2810,2811],{"class":1230}," word_count ",[1088,2813,2814],{"class":2451},"//",[1088,2816,2817],{"class":1242}," 200",[1088,2819,2619],{"class":1109},[1088,2821,2822],{"class":1094},"  # Assume 200 words per minute\n",[1088,2824,2826],{"class":1090,"line":2825},86,[1088,2827,1187],{"emptyLinePlaceholder":1186},[1088,2829,2831,2833,2836,2838,2840,2842,2844],{"class":1090,"line":2830},87,[1088,2832,1194],{"class":1193},[1088,2834,2835],{"class":1197}," Tag",[1088,2837,1201],{"class":1109},[1088,2839,1205],{"class":1204},[1088,2841,1110],{"class":1109},[1088,2843,1210],{"class":1204},[1088,2845,1213],{"class":1109},[1088,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2868,2870,2872,2874,2876],{"class":1090,"line":2848},88,[1088,2850,1219],{"class":1105},[1088,2852,1222],{"class":1109},[1088,2854,1225],{"class":1105},[1088,2856,1110],{"class":1109},[1088,2858,1231],{"class":1230},[1088,2860,1201],{"class":1109},[1088,2862,1237],{"class":1236},[1088,2864,1222],{"class":1109},[1088,2866,2867],{"class":1242},"50",[1088,2869,1246],{"class":1109},[1088,2871,1249],{"class":1236},[1088,2873,1222],{"class":1109},[1088,2875,1255],{"class":1254},[1088,2877,1258],{"class":1109},[1088,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907],{"class":1090,"line":2880},89,[1088,2882,1264],{"class":1105},[1088,2884,1222],{"class":1109},[1088,2886,1225],{"class":1105},[1088,2888,1110],{"class":1109},[1088,2890,1273],{"class":1230},[1088,2892,1201],{"class":1109},[1088,2894,1237],{"class":1236},[1088,2896,1222],{"class":1109},[1088,2898,2867],{"class":1242},[1088,2900,1246],{"class":1109},[1088,2902,1249],{"class":1236},[1088,2904,1222],{"class":1109},[1088,2906,1255],{"class":1254},[1088,2908,1258],{"class":1109},[1088,2910,2912,2915,2917,2919,2921,2923,2925,2927,2929,2932,2934,2936,2938,2940,2943,2945,2947],{"class":1090,"line":2911},90,[1088,2913,2914],{"class":1105},"    color ",[1088,2916,1222],{"class":1109},[1088,2918,1225],{"class":1105},[1088,2920,1110],{"class":1109},[1088,2922,1231],{"class":1230},[1088,2924,1201],{"class":1109},[1088,2926,1237],{"class":1236},[1088,2928,1222],{"class":1109},[1088,2930,2931],{"class":1242},"7",[1088,2933,1246],{"class":1109},[1088,2935,1871],{"class":1236},[1088,2937,1222],{"class":1109},[1088,2939,1394],{"class":1372},[1088,2941,2942],{"class":1376},"#007bff",[1088,2944,1394],{"class":1372},[1088,2946,2619],{"class":1109},[1088,2948,2949],{"class":1094},"  # Hex color\n",[1088,2951,2953],{"class":1090,"line":2952},91,[1088,2954,1349],{"class":1105},[1088,2956,2958,2960,2962],{"class":1090,"line":2957},92,[1088,2959,1355],{"class":1193},[1088,2961,1358],{"class":1197},[1088,2963,1361],{"class":1109},[1088,2965,2967,2969,2971,2973,2975,2977,2979],{"class":1090,"line":2966},93,[1088,2968,1386],{"class":1105},[1088,2970,1222],{"class":1109},[1088,2972,1391],{"class":1109},[1088,2974,1394],{"class":1372},[1088,2976,1397],{"class":1376},[1088,2978,1394],{"class":1372},[1088,2980,1402],{"class":1109},[1088,2982,2984],{"class":1090,"line":2983},94,[1088,2985,1349],{"class":1105},[1088,2987,2989,2991,2993,2995,2997],{"class":1090,"line":2988},95,[1088,2990,1413],{"class":1193},[1088,2992,1417],{"class":1416},[1088,2994,1201],{"class":1109},[1088,2996,1423],{"class":1422},[1088,2998,1213],{"class":1109},[1088,3000,3002,3004,3006,3008],{"class":1090,"line":3001},96,[1088,3003,1431],{"class":1101},[1088,3005,1435],{"class":1434},[1088,3007,1110],{"class":1109},[1088,3009,1441],{"class":1440},[1088,3011,3013],{"class":1090,"line":3012},97,[1088,3014,1349],{"class":1105},[1088,3016,3018,3020,3022,3024,3026],{"class":1090,"line":3017},98,[1088,3019,1413],{"class":1193},[1088,3021,1455],{"class":1454},[1088,3023,1201],{"class":1109},[1088,3025,1423],{"class":1422},[1088,3027,1213],{"class":1109},[1088,3029,3031,3033,3035,3037,3039,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060,3062,3064],{"class":1090,"line":3030},99,[1088,3032,1431],{"class":1101},[1088,3034,1469],{"class":1230},[1088,3036,1201],{"class":1109},[1088,3038,1394],{"class":1372},[1088,3040,3041],{"class":1376},"tag_detail",[1088,3043,1394],{"class":1372},[1088,3045,1246],{"class":1109},[1088,3047,1483],{"class":1236},[1088,3049,1486],{"class":1109},[1088,3051,1394],{"class":1372},[1088,3053,1491],{"class":1376},[1088,3055,1394],{"class":1372},[1088,3057,1496],{"class":1109},[1088,3059,1435],{"class":1434},[1088,3061,1110],{"class":1109},[1088,3063,1491],{"class":1440},[1088,3065,1505],{"class":1109},[1088,3067,3069],{"class":1090,"line":3068},100,[1088,3070,1187],{"emptyLinePlaceholder":1186},[1088,3072,3074,3076,3079,3081,3083,3085,3087],{"class":1090,"line":3073},101,[1088,3075,1194],{"class":1193},[1088,3077,3078],{"class":1197}," Comment",[1088,3080,1201],{"class":1109},[1088,3082,1205],{"class":1204},[1088,3084,1110],{"class":1109},[1088,3086,1210],{"class":1204},[1088,3088,1213],{"class":1109},[1088,3090,3092,3095,3097,3099,3101,3103,3105,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3131,3133],{"class":1090,"line":3091},102,[1088,3093,3094],{"class":1105},"    post ",[1088,3096,1222],{"class":1109},[1088,3098,1225],{"class":1105},[1088,3100,1110],{"class":1109},[1088,3102,1694],{"class":1230},[1088,3104,1201],{"class":1109},[1088,3106,3107],{"class":1230},"Post",[1088,3109,1246],{"class":1109},[1088,3111,1704],{"class":1236},[1088,3113,1222],{"class":1109},[1088,3115,1205],{"class":1230},[1088,3117,1110],{"class":1109},[1088,3119,1714],{"class":1713},[1088,3121,1246],{"class":1109},[1088,3123,1719],{"class":1236},[1088,3125,1222],{"class":1109},[1088,3127,1394],{"class":1372},[1088,3129,3130],{"class":1376},"comments",[1088,3132,1394],{"class":1372},[1088,3134,1258],{"class":1109},[1088,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162,3164],{"class":1090,"line":3137},103,[1088,3139,1685],{"class":1105},[1088,3141,1222],{"class":1109},[1088,3143,1225],{"class":1105},[1088,3145,1110],{"class":1109},[1088,3147,1694],{"class":1230},[1088,3149,1201],{"class":1109},[1088,3151,1699],{"class":1230},[1088,3153,1246],{"class":1109},[1088,3155,1704],{"class":1236},[1088,3157,1222],{"class":1109},[1088,3159,1205],{"class":1230},[1088,3161,1110],{"class":1109},[1088,3163,1714],{"class":1713},[1088,3165,1258],{"class":1109},[1088,3167,3169,3172,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3227,3229],{"class":1090,"line":3168},104,[1088,3170,3171],{"class":1105},"    parent ",[1088,3173,1222],{"class":1109},[1088,3175,1225],{"class":1105},[1088,3177,1110],{"class":1109},[1088,3179,1694],{"class":1230},[1088,3181,1201],{"class":1109},[1088,3183,1394],{"class":1372},[1088,3185,1423],{"class":1376},[1088,3187,1394],{"class":1372},[1088,3189,1246],{"class":1109},[1088,3191,1704],{"class":1236},[1088,3193,1222],{"class":1109},[1088,3195,1205],{"class":1230},[1088,3197,1110],{"class":1109},[1088,3199,1714],{"class":1713},[1088,3201,1246],{"class":1109},[1088,3203,1767],{"class":1236},[1088,3205,1222],{"class":1109},[1088,3207,1255],{"class":1254},[1088,3209,1246],{"class":1109},[1088,3211,1776],{"class":1236},[1088,3213,1222],{"class":1109},[1088,3215,1255],{"class":1254},[1088,3217,1246],{"class":1109},[1088,3219,1719],{"class":1236},[1088,3221,1222],{"class":1109},[1088,3223,1394],{"class":1372},[1088,3225,3226],{"class":1376},"replies",[1088,3228,1394],{"class":1372},[1088,3230,1258],{"class":1109},[1088,3232,3234,3236,3238,3240,3242,3244],{"class":1090,"line":3233},105,[1088,3235,1788],{"class":1105},[1088,3237,1222],{"class":1109},[1088,3239,1225],{"class":1105},[1088,3241,1110],{"class":1109},[1088,3243,1306],{"class":1230},[1088,3245,1799],{"class":1109},[1088,3247,3249,3252,3254,3256,3258,3261,3263,3265,3267,3270],{"class":1090,"line":3248},106,[1088,3250,3251],{"class":1105},"    is_approved ",[1088,3253,1222],{"class":1109},[1088,3255,1225],{"class":1105},[1088,3257,1110],{"class":1109},[1088,3259,3260],{"class":1230},"BooleanField",[1088,3262,1201],{"class":1109},[1088,3264,2162],{"class":1236},[1088,3266,1222],{"class":1109},[1088,3268,3269],{"class":1254},"False",[1088,3271,1258],{"class":1109},[1088,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293],{"class":1090,"line":3274},107,[1088,3276,1323],{"class":1105},[1088,3278,1222],{"class":1109},[1088,3280,1225],{"class":1105},[1088,3282,1110],{"class":1109},[1088,3284,1332],{"class":1230},[1088,3286,1201],{"class":1109},[1088,3288,1337],{"class":1236},[1088,3290,1222],{"class":1109},[1088,3292,1255],{"class":1254},[1088,3294,1258],{"class":1109},[1088,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316],{"class":1090,"line":3297},108,[1088,3299,2002],{"class":1105},[1088,3301,1222],{"class":1109},[1088,3303,1225],{"class":1105},[1088,3305,1110],{"class":1109},[1088,3307,1332],{"class":1230},[1088,3309,1201],{"class":1109},[1088,3311,2015],{"class":1236},[1088,3313,1222],{"class":1109},[1088,3315,1255],{"class":1254},[1088,3317,1258],{"class":1109},[1088,3319,3321],{"class":1090,"line":3320},109,[1088,3322,1349],{"class":1105},[1088,3324,3326,3328,3330],{"class":1090,"line":3325},110,[1088,3327,1355],{"class":1193},[1088,3329,1358],{"class":1197},[1088,3331,1361],{"class":1109},[1088,3333,3335,3337,3339,3341,3343,3346,3348],{"class":1090,"line":3334},111,[1088,3336,1386],{"class":1105},[1088,3338,1222],{"class":1109},[1088,3340,1391],{"class":1109},[1088,3342,1394],{"class":1372},[1088,3344,3345],{"class":1376},"created_at",[1088,3347,1394],{"class":1372},[1088,3349,1402],{"class":1109},[1088,3351,3353,3355,3357],{"class":1090,"line":3352},112,[1088,3354,2231],{"class":1105},[1088,3356,1222],{"class":1109},[1088,3358,1540],{"class":1109},[1088,3360,3362,3364,3366,3368,3370,3372,3374,3376,3379,3381,3383,3385,3388,3390],{"class":1090,"line":3361},113,[1088,3363,2241],{"class":1105},[1088,3365,1110],{"class":1109},[1088,3367,2246],{"class":1230},[1088,3369,1201],{"class":1109},[1088,3371,2251],{"class":1236},[1088,3373,2254],{"class":1109},[1088,3375,1394],{"class":1372},[1088,3377,3378],{"class":1376},"post",[1088,3380,1394],{"class":1372},[1088,3382,1246],{"class":1109},[1088,3384,1558],{"class":1372},[1088,3386,3387],{"class":1376},"is_approved",[1088,3389,1394],{"class":1372},[1088,3391,2273],{"class":1109},[1088,3393,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421],{"class":1090,"line":3394},114,[1088,3396,2241],{"class":1105},[1088,3398,1110],{"class":1109},[1088,3400,2246],{"class":1230},[1088,3402,1201],{"class":1109},[1088,3404,2251],{"class":1236},[1088,3406,2254],{"class":1109},[1088,3408,1394],{"class":1372},[1088,3410,2293],{"class":1376},[1088,3412,1394],{"class":1372},[1088,3414,1246],{"class":1109},[1088,3416,1558],{"class":1372},[1088,3418,3345],{"class":1376},[1088,3420,1394],{"class":1372},[1088,3422,2273],{"class":1109},[1088,3424,3426],{"class":1090,"line":3425},115,[1088,3427,2343],{"class":1109},[1088,3429,3431],{"class":1090,"line":3430},116,[1088,3432,1349],{"class":1105},[1088,3434,3436,3438,3440,3442,3444],{"class":1090,"line":3435},117,[1088,3437,1413],{"class":1193},[1088,3439,1417],{"class":1416},[1088,3441,1201],{"class":1109},[1088,3443,1423],{"class":1422},[1088,3445,1213],{"class":1109},[1088,3447,3449,3451,3454,3457,3461,3463,3465,3467,3469,3472,3475,3478,3480,3482,3484,3486,3488,3491,3493],{"class":1090,"line":3448},118,[1088,3450,1431],{"class":1101},[1088,3452,3453],{"class":1193}," f",[1088,3455,3456],{"class":1376},"'Comment by ",[1088,3458,3460],{"class":3459},"s3h35","{",[1088,3462,1423],{"class":1434},[1088,3464,1110],{"class":1109},[1088,3466,2293],{"class":1440},[1088,3468,1110],{"class":1109},[1088,3470,3471],{"class":1440},"username",[1088,3473,3474],{"class":3459},"}",[1088,3476,3477],{"class":1376}," on ",[1088,3479,3460],{"class":3459},[1088,3481,1423],{"class":1434},[1088,3483,1110],{"class":1109},[1088,3485,3378],{"class":1440},[1088,3487,1110],{"class":1109},[1088,3489,3490],{"class":1440},"title",[1088,3492,3474],{"class":3459},[1088,3494,3495],{"class":1376},"'\n",[1088,3497,3499],{"class":1090,"line":3498},119,[1088,3500,1349],{"class":1105},[1088,3502,3504,3506],{"class":1090,"line":3503},120,[1088,3505,2679],{"class":1109},[1088,3507,2682],{"class":2646},[1088,3509,3511,3513,3516,3518,3520],{"class":1090,"line":3510},121,[1088,3512,1413],{"class":1193},[1088,3514,3515],{"class":1454}," is_reply",[1088,3517,1201],{"class":1109},[1088,3519,1423],{"class":1422},[1088,3521,1213],{"class":1109},[1088,3523,3525,3527,3529,3531,3534,3537,3539],{"class":1090,"line":3524},122,[1088,3526,1431],{"class":1101},[1088,3528,1435],{"class":1434},[1088,3530,1110],{"class":1109},[1088,3532,3533],{"class":1440},"parent",[1088,3535,3536],{"class":2451}," is",[1088,3538,2499],{"class":2451},[1088,3540,3541],{"class":1254}," None\n",[1030,3543,3545],{"id":3544},"model-field-types","Model Field Types",[1038,3547,3549],{"id":3548},"comprehensive-field-examples","Comprehensive Field Examples",[1078,3551,3553],{"className":1080,"code":3552,"language":1082,"meta":1083,"style":1083},"# models.py\nfrom django.db import models\nfrom django.core.validators import MinValueValidator, MaxValueValidator, RegexValidator\nfrom django.contrib.auth.models import User\nimport uuid\n\nclass Product(models.Model):\n    # Primary key (auto-generated if not specified)\n    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)\n    \n    # Text fields\n    name = models.CharField(max_length=200)\n    description = models.TextField()\n    short_description = models.CharField(max_length=500, blank=True)\n    slug = models.SlugField(max_length=200, unique=True)\n    \n    # Numeric fields\n    price = models.DecimalField(max_digits=10, decimal_places=2)\n    cost = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)\n    weight = models.FloatField(help_text=\"Weight in kilograms\")\n    quantity_in_stock = models.PositiveIntegerField(default=0)\n    minimum_stock_level = models.PositiveSmallIntegerField(default=5)\n    \n    # Boolean fields\n    is_active = models.BooleanField(default=True)\n    is_featured = models.BooleanField(default=False)\n    requires_shipping = models.BooleanField(default=True)\n    \n    # Date and time fields\n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n    available_from = models.DateField(null=True, blank=True)\n    available_until = models.DateField(null=True, blank=True)\n    \n    # Choice fields\n    CONDITION_CHOICES = [\n        ('new', 'New'),\n        ('refurbished', 'Refurbished'),\n        ('used', 'Used'),\n    ]\n    condition = models.CharField(max_length=20, choices=CONDITION_CHOICES, default='new')\n    \n    # File fields\n    main_image = models.ImageField(upload_to='products/images/', blank=True, null=True)\n    manual_pdf = models.FileField(upload_to='products/manuals/', blank=True, null=True)\n    \n    # JSON field (PostgreSQL, MySQL 5.7+, SQLite 3.38+)\n    specifications = models.JSONField(default=dict, blank=True)\n    \n    # Custom validators\n    sku = models.CharField(\n        max_length=20,\n        unique=True,\n        validators=[\n            RegexValidator(\n                regex=r'^[A-Z]{2}\\d{4}[A-Z]{2}$',\n                message='SKU must be in format: XX0000XX'\n            )\n        ]\n    )\n    \n    rating = models.DecimalField(\n        max_digits=3,\n        decimal_places=2,\n        validators=[MinValueValidator(0.0), MaxValueValidator(5.0)],\n        null=True,\n        blank=True\n    )\n    \n    class Meta:\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['is_active', 'is_featured']),\n            models.Index(fields=['price']),\n            models.Index(fields=['created_at']),\n        ]\n        constraints = [\n            models.CheckConstraint(\n                check=models.Q(price__gte=0),\n                name='positive_price'\n            ),\n            models.CheckConstraint(\n                check=models.Q(quantity_in_stock__gte=0),\n                name='positive_stock'\n            ),\n        ]\n    \n    def __str__(self):\n        return self.name\n    \n    @property\n    def is_in_stock(self):\n        return self.quantity_in_stock > 0\n    \n    @property\n    def is_low_stock(self):\n        return self.quantity_in_stock \u003C= self.minimum_stock_level\n    \n    def get_profit_margin(self):\n        if self.cost:\n            return ((self.price - self.cost) / self.price) * 100\n        return None\n\nclass ProductImage(models.Model):\n    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='images')\n    image = models.ImageField(upload_to='products/gallery/')\n    alt_text = models.CharField(max_length=200)\n    is_primary = models.BooleanField(default=False)\n    order = models.PositiveSmallIntegerField(default=0)\n    \n    class Meta:\n        ordering = ['order', 'id']\n        unique_together = [['product', 'order']]\n    \n    def __str__(self):\n        return f'{self.product.name} - Image {self.order}'\n\nclass ProductReview(models.Model):\n    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='reviews')\n    user = models.ForeignKey(User, on_delete=models.CASCADE)\n    rating = models.PositiveSmallIntegerField(\n        validators=[MinValueValidator(1), MaxValueValidator(5)]\n    )\n    title = models.CharField(max_length=200)\n    content = models.TextField()\n    is_verified_purchase = models.BooleanField(default=False)\n    helpful_votes = models.PositiveIntegerField(default=0)\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        unique_together = [['product', 'user']]\n        ordering = ['-created_at']\n    \n    def __str__(self):\n        return f'{self.rating}★ - {self.title}'\n",[1085,3554,3555,3559,3573,3604,3626,3633,3637,3654,3659,3707,3711,3716,3738,3752,3784,3814,3818,3823,3858,3905,3936,3959,3984,3988,3993,4016,4039,4062,4066,4071,4093,4115,4147,4178,4182,4187,4196,4218,4240,4262,4266,4311,4315,4320,4364,4409,4413,4418,4451,4455,4460,4476,4488,4499,4507,4514,4565,4579,4584,4588,4593,4597,4612,4624,4635,4662,4673,4683,4687,4691,4699,4715,4723,4755,4778,4800,4804,4813,4824,4849,4863,4868,4878,4901,4914,4918,4922,4926,4938,4948,4952,4958,4971,4987,4991,4997,5010,5029,5033,5046,5059,5100,5106,5110,5127,5172,5200,5223,5246,5269,5273,5281,5307,5335,5339,5351,5388,5392,5409,5452,5483,5497,5520,5525,5548,5563,5587,5611,5634,5639,5648,5674,5691,5696,5709],{"__ignoreMap":1083},[1088,3556,3557],{"class":1090,"line":1091},[1088,3558,1095],{"class":1094},[1088,3560,3561,3563,3565,3567,3569,3571],{"class":1090,"line":1098},[1088,3562,1102],{"class":1101},[1088,3564,1106],{"class":1105},[1088,3566,1110],{"class":1109},[1088,3568,1113],{"class":1105},[1088,3570,1116],{"class":1101},[1088,3572,1119],{"class":1105},[1088,3574,3575,3577,3579,3581,3584,3586,3589,3591,3594,3596,3599,3601],{"class":1090,"line":1122},[1088,3576,1102],{"class":1101},[1088,3578,1106],{"class":1105},[1088,3580,1110],{"class":1109},[1088,3582,3583],{"class":1105},"core",[1088,3585,1110],{"class":1109},[1088,3587,3588],{"class":1105},"validators ",[1088,3590,1116],{"class":1101},[1088,3592,3593],{"class":1105}," MinValueValidator",[1088,3595,1246],{"class":1109},[1088,3597,3598],{"class":1105}," MaxValueValidator",[1088,3600,1246],{"class":1109},[1088,3602,3603],{"class":1105}," RegexValidator\n",[1088,3605,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624],{"class":1090,"line":1149},[1088,3607,1102],{"class":1101},[1088,3609,1106],{"class":1105},[1088,3611,1110],{"class":1109},[1088,3613,1131],{"class":1105},[1088,3615,1110],{"class":1109},[1088,3617,1136],{"class":1105},[1088,3619,1110],{"class":1109},[1088,3621,1141],{"class":1105},[1088,3623,1116],{"class":1101},[1088,3625,1146],{"class":1105},[1088,3627,3628,3630],{"class":1090,"line":1166},[1088,3629,1116],{"class":1101},[1088,3631,3632],{"class":1105}," uuid\n",[1088,3634,3635],{"class":1090,"line":1183},[1088,3636,1187],{"emptyLinePlaceholder":1186},[1088,3638,3639,3641,3644,3646,3648,3650,3652],{"class":1090,"line":1190},[1088,3640,1194],{"class":1193},[1088,3642,3643],{"class":1197}," Product",[1088,3645,1201],{"class":1109},[1088,3647,1205],{"class":1204},[1088,3649,1110],{"class":1109},[1088,3651,1210],{"class":1204},[1088,3653,1213],{"class":1109},[1088,3655,3656],{"class":1090,"line":1216},[1088,3657,3658],{"class":1094},"    # Primary key (auto-generated if not specified)\n",[1088,3660,3661,3664,3666,3668,3670,3673,3675,3678,3680,3682,3684,3686,3688,3691,3693,3696,3698,3701,3703,3705],{"class":1090,"line":1261},[1088,3662,3663],{"class":1416},"    id",[1088,3665,1537],{"class":1109},[1088,3667,1225],{"class":1105},[1088,3669,1110],{"class":1109},[1088,3671,3672],{"class":1230},"UUIDField",[1088,3674,1201],{"class":1109},[1088,3676,3677],{"class":1236},"primary_key",[1088,3679,1222],{"class":1109},[1088,3681,1255],{"class":1254},[1088,3683,1246],{"class":1109},[1088,3685,1871],{"class":1236},[1088,3687,1222],{"class":1109},[1088,3689,3690],{"class":1230},"uuid",[1088,3692,1110],{"class":1109},[1088,3694,3695],{"class":1440},"uuid4",[1088,3697,1246],{"class":1109},[1088,3699,3700],{"class":1236}," editable",[1088,3702,1222],{"class":1109},[1088,3704,3269],{"class":1254},[1088,3706,1258],{"class":1109},[1088,3708,3709],{"class":1090,"line":1294},[1088,3710,1349],{"class":1105},[1088,3712,3713],{"class":1090,"line":1320},[1088,3714,3715],{"class":1094},"    # Text fields\n",[1088,3717,3718,3720,3722,3724,3726,3728,3730,3732,3734,3736],{"class":1090,"line":1346},[1088,3719,1219],{"class":1105},[1088,3721,1222],{"class":1109},[1088,3723,1225],{"class":1105},[1088,3725,1110],{"class":1109},[1088,3727,1231],{"class":1230},[1088,3729,1201],{"class":1109},[1088,3731,1237],{"class":1236},[1088,3733,1222],{"class":1109},[1088,3735,1646],{"class":1242},[1088,3737,1258],{"class":1109},[1088,3739,3740,3742,3744,3746,3748,3750],{"class":1090,"line":1352},[1088,3741,1297],{"class":1105},[1088,3743,1222],{"class":1109},[1088,3745,1225],{"class":1105},[1088,3747,1110],{"class":1109},[1088,3749,1306],{"class":1230},[1088,3751,1799],{"class":1109},[1088,3753,3754,3757,3759,3761,3763,3765,3767,3769,3771,3774,3776,3778,3780,3782],{"class":1090,"line":1364},[1088,3755,3756],{"class":1105},"    short_description ",[1088,3758,1222],{"class":1109},[1088,3760,1225],{"class":1105},[1088,3762,1110],{"class":1109},[1088,3764,1231],{"class":1230},[1088,3766,1201],{"class":1109},[1088,3768,1237],{"class":1236},[1088,3770,1222],{"class":1109},[1088,3772,3773],{"class":1242},"500",[1088,3775,1246],{"class":1109},[1088,3777,1776],{"class":1236},[1088,3779,1222],{"class":1109},[1088,3781,1255],{"class":1254},[1088,3783,1258],{"class":1109},[1088,3785,3786,3788,3790,3792,3794,3796,3798,3800,3802,3804,3806,3808,3810,3812],{"class":1090,"line":1383},[1088,3787,1264],{"class":1105},[1088,3789,1222],{"class":1109},[1088,3791,1225],{"class":1105},[1088,3793,1110],{"class":1109},[1088,3795,1273],{"class":1230},[1088,3797,1201],{"class":1109},[1088,3799,1237],{"class":1236},[1088,3801,1222],{"class":1109},[1088,3803,1646],{"class":1242},[1088,3805,1246],{"class":1109},[1088,3807,1249],{"class":1236},[1088,3809,1222],{"class":1109},[1088,3811,1255],{"class":1254},[1088,3813,1258],{"class":1109},[1088,3815,3816],{"class":1090,"line":1405},[1088,3817,1349],{"class":1105},[1088,3819,3820],{"class":1090,"line":1410},[1088,3821,3822],{"class":1094},"    # Numeric fields\n",[1088,3824,3825,3828,3830,3832,3834,3837,3839,3842,3844,3846,3848,3851,3853,3856],{"class":1090,"line":1428},[1088,3826,3827],{"class":1105},"    price ",[1088,3829,1222],{"class":1109},[1088,3831,1225],{"class":1105},[1088,3833,1110],{"class":1109},[1088,3835,3836],{"class":1230},"DecimalField",[1088,3838,1201],{"class":1109},[1088,3840,3841],{"class":1236},"max_digits",[1088,3843,1222],{"class":1109},[1088,3845,1855],{"class":1242},[1088,3847,1246],{"class":1109},[1088,3849,3850],{"class":1236}," decimal_places",[1088,3852,1222],{"class":1109},[1088,3854,3855],{"class":1242},"2",[1088,3857,1258],{"class":1109},[1088,3859,3860,3863,3865,3867,3869,3871,3873,3875,3877,3879,3881,3883,3885,3887,3889,3891,3893,3895,3897,3899,3901,3903],{"class":1090,"line":1444},[1088,3861,3862],{"class":1105},"    cost ",[1088,3864,1222],{"class":1109},[1088,3866,1225],{"class":1105},[1088,3868,1110],{"class":1109},[1088,3870,3836],{"class":1230},[1088,3872,1201],{"class":1109},[1088,3874,3841],{"class":1236},[1088,3876,1222],{"class":1109},[1088,3878,1855],{"class":1242},[1088,3880,1246],{"class":1109},[1088,3882,3850],{"class":1236},[1088,3884,1222],{"class":1109},[1088,3886,3855],{"class":1242},[1088,3888,1246],{"class":1109},[1088,3890,1767],{"class":1236},[1088,3892,1222],{"class":1109},[1088,3894,1255],{"class":1254},[1088,3896,1246],{"class":1109},[1088,3898,1776],{"class":1236},[1088,3900,1222],{"class":1109},[1088,3902,1255],{"class":1254},[1088,3904,1258],{"class":1109},[1088,3906,3907,3910,3912,3914,3916,3919,3921,3924,3926,3929,3932,3934],{"class":1090,"line":1449},[1088,3908,3909],{"class":1105},"    weight ",[1088,3911,1222],{"class":1109},[1088,3913,1225],{"class":1105},[1088,3915,1110],{"class":1109},[1088,3917,3918],{"class":1230},"FloatField",[1088,3920,1201],{"class":1109},[1088,3922,3923],{"class":1236},"help_text",[1088,3925,1222],{"class":1109},[1088,3927,3928],{"class":1372},"\"",[1088,3930,3931],{"class":1376},"Weight in kilograms",[1088,3933,3928],{"class":1372},[1088,3935,1258],{"class":1109},[1088,3937,3938,3941,3943,3945,3947,3949,3951,3953,3955,3957],{"class":1090,"line":1464},[1088,3939,3940],{"class":1105},"    quantity_in_stock ",[1088,3942,1222],{"class":1109},[1088,3944,1225],{"class":1105},[1088,3946,1110],{"class":1109},[1088,3948,2157],{"class":1230},[1088,3950,1201],{"class":1109},[1088,3952,2162],{"class":1236},[1088,3954,1222],{"class":1109},[1088,3956,2167],{"class":1242},[1088,3958,1258],{"class":1109},[1088,3960,3961,3964,3966,3968,3970,3973,3975,3977,3979,3982],{"class":1090,"line":1508},[1088,3962,3963],{"class":1105},"    minimum_stock_level ",[1088,3965,1222],{"class":1109},[1088,3967,1225],{"class":1105},[1088,3969,1110],{"class":1109},[1088,3971,3972],{"class":1230},"PositiveSmallIntegerField",[1088,3974,1201],{"class":1109},[1088,3976,2162],{"class":1236},[1088,3978,1222],{"class":1109},[1088,3980,3981],{"class":1242},"5",[1088,3983,1258],{"class":1109},[1088,3985,3986],{"class":1090,"line":1513},[1088,3987,1349],{"class":1105},[1088,3989,3990],{"class":1090,"line":1531},[1088,3991,3992],{"class":1094},"    # Boolean fields\n",[1088,3994,3995,3998,4000,4002,4004,4006,4008,4010,4012,4014],{"class":1090,"line":1543},[1088,3996,3997],{"class":1105},"    is_active ",[1088,3999,1222],{"class":1109},[1088,4001,1225],{"class":1105},[1088,4003,1110],{"class":1109},[1088,4005,3260],{"class":1230},[1088,4007,1201],{"class":1109},[1088,4009,2162],{"class":1236},[1088,4011,1222],{"class":1109},[1088,4013,1255],{"class":1254},[1088,4015,1258],{"class":1109},[1088,4017,4018,4021,4023,4025,4027,4029,4031,4033,4035,4037],{"class":1090,"line":1569},[1088,4019,4020],{"class":1105},"    is_featured ",[1088,4022,1222],{"class":1109},[1088,4024,1225],{"class":1105},[1088,4026,1110],{"class":1109},[1088,4028,3260],{"class":1230},[1088,4030,1201],{"class":1109},[1088,4032,2162],{"class":1236},[1088,4034,1222],{"class":1109},[1088,4036,3269],{"class":1254},[1088,4038,1258],{"class":1109},[1088,4040,4041,4044,4046,4048,4050,4052,4054,4056,4058,4060],{"class":1090,"line":1592},[1088,4042,4043],{"class":1105},"    requires_shipping ",[1088,4045,1222],{"class":1109},[1088,4047,1225],{"class":1105},[1088,4049,1110],{"class":1109},[1088,4051,3260],{"class":1230},[1088,4053,1201],{"class":1109},[1088,4055,2162],{"class":1236},[1088,4057,1222],{"class":1109},[1088,4059,1255],{"class":1254},[1088,4061,1258],{"class":1109},[1088,4063,4064],{"class":1090,"line":1615},[1088,4065,1349],{"class":1105},[1088,4067,4068],{"class":1090,"line":1621},[1088,4069,4070],{"class":1094},"    # Date and time fields\n",[1088,4072,4073,4075,4077,4079,4081,4083,4085,4087,4089,4091],{"class":1090,"line":1626},[1088,4074,1323],{"class":1105},[1088,4076,1222],{"class":1109},[1088,4078,1225],{"class":1105},[1088,4080,1110],{"class":1109},[1088,4082,1332],{"class":1230},[1088,4084,1201],{"class":1109},[1088,4086,1337],{"class":1236},[1088,4088,1222],{"class":1109},[1088,4090,1255],{"class":1254},[1088,4092,1258],{"class":1109},[1088,4094,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113],{"class":1090,"line":1651},[1088,4096,2002],{"class":1105},[1088,4098,1222],{"class":1109},[1088,4100,1225],{"class":1105},[1088,4102,1110],{"class":1109},[1088,4104,1332],{"class":1230},[1088,4106,1201],{"class":1109},[1088,4108,2015],{"class":1236},[1088,4110,1222],{"class":1109},[1088,4112,1255],{"class":1254},[1088,4114,1258],{"class":1109},[1088,4116,4117,4120,4122,4124,4126,4129,4131,4133,4135,4137,4139,4141,4143,4145],{"class":1090,"line":1682},[1088,4118,4119],{"class":1105},"    available_from ",[1088,4121,1222],{"class":1109},[1088,4123,1225],{"class":1105},[1088,4125,1110],{"class":1109},[1088,4127,4128],{"class":1230},"DateField",[1088,4130,1201],{"class":1109},[1088,4132,2040],{"class":1236},[1088,4134,1222],{"class":1109},[1088,4136,1255],{"class":1254},[1088,4138,1246],{"class":1109},[1088,4140,1776],{"class":1236},[1088,4142,1222],{"class":1109},[1088,4144,1255],{"class":1254},[1088,4146,1258],{"class":1109},[1088,4148,4149,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176],{"class":1090,"line":1733},[1088,4150,4151],{"class":1105},"    available_until ",[1088,4153,1222],{"class":1109},[1088,4155,1225],{"class":1105},[1088,4157,1110],{"class":1109},[1088,4159,4128],{"class":1230},[1088,4161,1201],{"class":1109},[1088,4163,2040],{"class":1236},[1088,4165,1222],{"class":1109},[1088,4167,1255],{"class":1254},[1088,4169,1246],{"class":1109},[1088,4171,1776],{"class":1236},[1088,4173,1222],{"class":1109},[1088,4175,1255],{"class":1254},[1088,4177,1258],{"class":1109},[1088,4179,4180],{"class":1090,"line":1785},[1088,4181,1349],{"class":1105},[1088,4183,4184],{"class":1090,"line":1802},[1088,4185,4186],{"class":1094},"    # Choice fields\n",[1088,4188,4189,4192,4194],{"class":1090,"line":1835},[1088,4190,4191],{"class":1434},"    CONDITION_CHOICES",[1088,4193,1537],{"class":1109},[1088,4195,1540],{"class":1109},[1088,4197,4198,4200,4202,4205,4207,4209,4211,4214,4216],{"class":1090,"line":1884},[1088,4199,1546],{"class":1109},[1088,4201,1394],{"class":1372},[1088,4203,4204],{"class":1376},"new",[1088,4206,1394],{"class":1372},[1088,4208,1246],{"class":1109},[1088,4210,1558],{"class":1372},[1088,4212,4213],{"class":1376},"New",[1088,4215,1394],{"class":1372},[1088,4217,1566],{"class":1109},[1088,4219,4220,4222,4224,4227,4229,4231,4233,4236,4238],{"class":1090,"line":1931},[1088,4221,1546],{"class":1109},[1088,4223,1394],{"class":1372},[1088,4225,4226],{"class":1376},"refurbished",[1088,4228,1394],{"class":1372},[1088,4230,1246],{"class":1109},[1088,4232,1558],{"class":1372},[1088,4234,4235],{"class":1376},"Refurbished",[1088,4237,1394],{"class":1372},[1088,4239,1566],{"class":1109},[1088,4241,4242,4244,4246,4249,4251,4253,4255,4258,4260],{"class":1090,"line":1965},[1088,4243,1546],{"class":1109},[1088,4245,1394],{"class":1372},[1088,4247,4248],{"class":1376},"used",[1088,4250,1394],{"class":1372},[1088,4252,1246],{"class":1109},[1088,4254,1558],{"class":1372},[1088,4256,4257],{"class":1376},"Used",[1088,4259,1394],{"class":1372},[1088,4261,1566],{"class":1109},[1088,4263,4264],{"class":1090,"line":1970},[1088,4265,1618],{"class":1109},[1088,4267,4268,4271,4273,4275,4277,4279,4281,4283,4285,4288,4290,4292,4294,4297,4299,4301,4303,4305,4307,4309],{"class":1090,"line":1976},[1088,4269,4270],{"class":1105},"    condition ",[1088,4272,1222],{"class":1109},[1088,4274,1225],{"class":1105},[1088,4276,1110],{"class":1109},[1088,4278,1231],{"class":1230},[1088,4280,1201],{"class":1109},[1088,4282,1237],{"class":1236},[1088,4284,1222],{"class":1109},[1088,4286,4287],{"class":1242},"20",[1088,4289,1246],{"class":1109},[1088,4291,1860],{"class":1236},[1088,4293,1222],{"class":1109},[1088,4295,4296],{"class":1865},"CONDITION_CHOICES",[1088,4298,1246],{"class":1109},[1088,4300,1871],{"class":1236},[1088,4302,1222],{"class":1109},[1088,4304,1394],{"class":1372},[1088,4306,4204],{"class":1376},[1088,4308,1394],{"class":1372},[1088,4310,1258],{"class":1109},[1088,4312,4313],{"class":1090,"line":1999},[1088,4314,1349],{"class":1105},[1088,4316,4317],{"class":1090,"line":2024},[1088,4318,4319],{"class":1094},"    # File fields\n",[1088,4321,4322,4325,4327,4329,4331,4333,4335,4337,4339,4341,4344,4346,4348,4350,4352,4354,4356,4358,4360,4362],{"class":1090,"line":2057},[1088,4323,4324],{"class":1105},"    main_image ",[1088,4326,1222],{"class":1109},[1088,4328,1225],{"class":1105},[1088,4330,1110],{"class":1109},[1088,4332,1896],{"class":1230},[1088,4334,1201],{"class":1109},[1088,4336,1901],{"class":1236},[1088,4338,1222],{"class":1109},[1088,4340,1394],{"class":1372},[1088,4342,4343],{"class":1376},"products/images/",[1088,4345,1394],{"class":1372},[1088,4347,1246],{"class":1109},[1088,4349,1776],{"class":1236},[1088,4351,1222],{"class":1109},[1088,4353,1255],{"class":1254},[1088,4355,1246],{"class":1109},[1088,4357,1767],{"class":1236},[1088,4359,1222],{"class":1109},[1088,4361,1255],{"class":1254},[1088,4363,1258],{"class":1109},[1088,4365,4366,4369,4371,4373,4375,4378,4380,4382,4384,4386,4389,4391,4393,4395,4397,4399,4401,4403,4405,4407],{"class":1090,"line":2062},[1088,4367,4368],{"class":1105},"    manual_pdf ",[1088,4370,1222],{"class":1109},[1088,4372,1225],{"class":1105},[1088,4374,1110],{"class":1109},[1088,4376,4377],{"class":1230},"FileField",[1088,4379,1201],{"class":1109},[1088,4381,1901],{"class":1236},[1088,4383,1222],{"class":1109},[1088,4385,1394],{"class":1372},[1088,4387,4388],{"class":1376},"products/manuals/",[1088,4390,1394],{"class":1372},[1088,4392,1246],{"class":1109},[1088,4394,1776],{"class":1236},[1088,4396,1222],{"class":1109},[1088,4398,1255],{"class":1254},[1088,4400,1246],{"class":1109},[1088,4402,1767],{"class":1236},[1088,4404,1222],{"class":1109},[1088,4406,1255],{"class":1254},[1088,4408,1258],{"class":1109},[1088,4410,4411],{"class":1090,"line":2068},[1088,4412,1349],{"class":1105},[1088,4414,4415],{"class":1090,"line":2101},[1088,4416,4417],{"class":1094},"    # JSON field (PostgreSQL, MySQL 5.7+, SQLite 3.38+)\n",[1088,4419,4420,4423,4425,4427,4429,4432,4434,4436,4438,4441,4443,4445,4447,4449],{"class":1090,"line":2134},[1088,4421,4422],{"class":1105},"    specifications ",[1088,4424,1222],{"class":1109},[1088,4426,1225],{"class":1105},[1088,4428,1110],{"class":1109},[1088,4430,4431],{"class":1230},"JSONField",[1088,4433,1201],{"class":1109},[1088,4435,2162],{"class":1236},[1088,4437,1222],{"class":1109},[1088,4439,4440],{"class":2646},"dict",[1088,4442,1246],{"class":1109},[1088,4444,1776],{"class":1236},[1088,4446,1222],{"class":1109},[1088,4448,1255],{"class":1254},[1088,4450,1258],{"class":1109},[1088,4452,4453],{"class":1090,"line":2139},[1088,4454,1349],{"class":1105},[1088,4456,4457],{"class":1090,"line":2145},[1088,4458,4459],{"class":1094},"    # Custom validators\n",[1088,4461,4462,4465,4467,4469,4471,4473],{"class":1090,"line":2172},[1088,4463,4464],{"class":1105},"    sku ",[1088,4466,1222],{"class":1109},[1088,4468,1225],{"class":1105},[1088,4470,1110],{"class":1109},[1088,4472,1231],{"class":1230},[1088,4474,4475],{"class":1109},"(\n",[1088,4477,4478,4481,4483,4485],{"class":1090,"line":2196},[1088,4479,4480],{"class":1236},"        max_length",[1088,4482,1222],{"class":1109},[1088,4484,4287],{"class":1242},[1088,4486,4487],{"class":1109},",\n",[1088,4489,4490,4493,4495,4497],{"class":1090,"line":2201},[1088,4491,4492],{"class":1236},"        unique",[1088,4494,1222],{"class":1109},[1088,4496,1255],{"class":1254},[1088,4498,4487],{"class":1109},[1088,4500,4501,4504],{"class":1090,"line":2210},[1088,4502,4503],{"class":1236},"        validators",[1088,4505,4506],{"class":1109},"=[\n",[1088,4508,4509,4512],{"class":1090,"line":2228},[1088,4510,4511],{"class":1230},"            RegexValidator",[1088,4513,4475],{"class":1109},[1088,4515,4516,4519,4521,4524,4526,4530,4534,4538,4540,4544,4547,4550,4552,4554,4556,4558,4561,4563],{"class":1090,"line":2238},[1088,4517,4518],{"class":1236},"                regex",[1088,4520,1222],{"class":1109},[1088,4522,4523],{"class":1193},"r",[1088,4525,1394],{"class":1372},[1088,4527,4529],{"class":4528},"sRJPX","^",[1088,4531,4533],{"class":4532},"sETVe","[",[1088,4535,4537],{"class":4536},"sz9Cv","A-Z",[1088,4539,2592],{"class":4532},[1088,4541,4543],{"class":4542},"sGuSu","{2}",[1088,4545,4546],{"class":4528},"\\d",[1088,4548,4549],{"class":4542},"{4}",[1088,4551,4533],{"class":4532},[1088,4553,4537],{"class":4536},[1088,4555,2592],{"class":4532},[1088,4557,4543],{"class":4542},[1088,4559,4560],{"class":4528},"$",[1088,4562,1394],{"class":1372},[1088,4564,4487],{"class":1109},[1088,4566,4567,4570,4572,4574,4577],{"class":1090,"line":2276},[1088,4568,4569],{"class":1236},"                message",[1088,4571,1222],{"class":1109},[1088,4573,1394],{"class":1372},[1088,4575,4576],{"class":1376},"SKU must be in format: XX0000XX",[1088,4578,3495],{"class":1372},[1088,4580,4581],{"class":1090,"line":2308},[1088,4582,4583],{"class":1109},"            )\n",[1088,4585,4586],{"class":1090,"line":2340},[1088,4587,2343],{"class":1109},[1088,4589,4590],{"class":1090,"line":2346},[1088,4591,4592],{"class":1109},"    )\n",[1088,4594,4595],{"class":1090,"line":2351},[1088,4596,1349],{"class":1105},[1088,4598,4599,4602,4604,4606,4608,4610],{"class":1090,"line":2364},[1088,4600,4601],{"class":1105},"    rating ",[1088,4603,1222],{"class":1109},[1088,4605,1225],{"class":1105},[1088,4607,1110],{"class":1109},[1088,4609,3836],{"class":1230},[1088,4611,4475],{"class":1109},[1088,4613,4614,4617,4619,4622],{"class":1090,"line":2376},[1088,4615,4616],{"class":1236},"        max_digits",[1088,4618,1222],{"class":1109},[1088,4620,4621],{"class":1242},"3",[1088,4623,4487],{"class":1109},[1088,4625,4626,4629,4631,4633],{"class":1090,"line":2381},[1088,4627,4628],{"class":1236},"        decimal_places",[1088,4630,1222],{"class":1109},[1088,4632,3855],{"class":1242},[1088,4634,4487],{"class":1109},[1088,4636,4637,4639,4641,4644,4646,4649,4652,4654,4656,4659],{"class":1090,"line":2394},[1088,4638,4503],{"class":1236},[1088,4640,2254],{"class":1109},[1088,4642,4643],{"class":1230},"MinValueValidator",[1088,4645,1201],{"class":1109},[1088,4647,4648],{"class":1242},"0.0",[1088,4650,4651],{"class":1109},"),",[1088,4653,3598],{"class":1230},[1088,4655,1201],{"class":1109},[1088,4657,4658],{"class":1242},"5.0",[1088,4660,4661],{"class":1109},")],\n",[1088,4663,4664,4667,4669,4671],{"class":1090,"line":2432},[1088,4665,4666],{"class":1236},"        null",[1088,4668,1222],{"class":1109},[1088,4670,1255],{"class":1254},[1088,4672,4487],{"class":1109},[1088,4674,4675,4678,4680],{"class":1090,"line":2437},[1088,4676,4677],{"class":1236},"        blank",[1088,4679,1222],{"class":1109},[1088,4681,4682],{"class":1254},"True\n",[1088,4684,4685],{"class":1090,"line":2469},[1088,4686,4592],{"class":1109},[1088,4688,4689],{"class":1090,"line":2475},[1088,4690,1349],{"class":1105},[1088,4692,4693,4695,4697],{"class":1090,"line":2510},[1088,4694,1355],{"class":1193},[1088,4696,1358],{"class":1197},[1088,4698,1361],{"class":1109},[1088,4700,4701,4703,4705,4707,4709,4711,4713],{"class":1090,"line":2532},[1088,4702,1386],{"class":1105},[1088,4704,1222],{"class":1109},[1088,4706,1391],{"class":1109},[1088,4708,1394],{"class":1372},[1088,4710,2221],{"class":1376},[1088,4712,1394],{"class":1372},[1088,4714,1402],{"class":1109},[1088,4716,4717,4719,4721],{"class":1090,"line":2538},[1088,4718,2231],{"class":1105},[1088,4720,1222],{"class":1109},[1088,4722,1540],{"class":1109},[1088,4724,4725,4727,4729,4731,4733,4735,4737,4739,4742,4744,4746,4748,4751,4753],{"class":1090,"line":2544},[1088,4726,2241],{"class":1105},[1088,4728,1110],{"class":1109},[1088,4730,2246],{"class":1230},[1088,4732,1201],{"class":1109},[1088,4734,2251],{"class":1236},[1088,4736,2254],{"class":1109},[1088,4738,1394],{"class":1372},[1088,4740,4741],{"class":1376},"is_active",[1088,4743,1394],{"class":1372},[1088,4745,1246],{"class":1109},[1088,4747,1558],{"class":1372},[1088,4749,4750],{"class":1376},"is_featured",[1088,4752,1394],{"class":1372},[1088,4754,2273],{"class":1109},[1088,4756,4757,4759,4761,4763,4765,4767,4769,4771,4774,4776],{"class":1090,"line":2569},[1088,4758,2241],{"class":1105},[1088,4760,1110],{"class":1109},[1088,4762,2246],{"class":1230},[1088,4764,1201],{"class":1109},[1088,4766,2251],{"class":1236},[1088,4768,2254],{"class":1109},[1088,4770,1394],{"class":1372},[1088,4772,4773],{"class":1376},"price",[1088,4775,1394],{"class":1372},[1088,4777,2273],{"class":1109},[1088,4779,4780,4782,4784,4786,4788,4790,4792,4794,4796,4798],{"class":1090,"line":2638},[1088,4781,2241],{"class":1105},[1088,4783,1110],{"class":1109},[1088,4785,2246],{"class":1230},[1088,4787,1201],{"class":1109},[1088,4789,2251],{"class":1236},[1088,4791,2254],{"class":1109},[1088,4793,1394],{"class":1372},[1088,4795,3345],{"class":1376},[1088,4797,1394],{"class":1372},[1088,4799,2273],{"class":1109},[1088,4801,4802],{"class":1090,"line":2643},[1088,4803,2343],{"class":1109},[1088,4805,4806,4809,4811],{"class":1090,"line":2671},[1088,4807,4808],{"class":1105},"        constraints ",[1088,4810,1222],{"class":1109},[1088,4812,1540],{"class":1109},[1088,4814,4815,4817,4819,4822],{"class":1090,"line":2676},[1088,4816,2241],{"class":1105},[1088,4818,1110],{"class":1109},[1088,4820,4821],{"class":1230},"CheckConstraint",[1088,4823,4475],{"class":1109},[1088,4825,4826,4829,4831,4833,4835,4838,4840,4843,4845,4847],{"class":1090,"line":2685},[1088,4827,4828],{"class":1236},"                check",[1088,4830,1222],{"class":1109},[1088,4832,1205],{"class":1230},[1088,4834,1110],{"class":1109},[1088,4836,4837],{"class":1230},"Q",[1088,4839,1201],{"class":1109},[1088,4841,4842],{"class":1236},"price__gte",[1088,4844,1222],{"class":1109},[1088,4846,2167],{"class":1242},[1088,4848,1566],{"class":1109},[1088,4850,4851,4854,4856,4858,4861],{"class":1090,"line":2699},[1088,4852,4853],{"class":1236},"                name",[1088,4855,1222],{"class":1109},[1088,4857,1394],{"class":1372},[1088,4859,4860],{"class":1376},"positive_price",[1088,4862,3495],{"class":1372},[1088,4864,4865],{"class":1090,"line":2737},[1088,4866,4867],{"class":1109},"            ),\n",[1088,4869,4870,4872,4874,4876],{"class":1090,"line":2742},[1088,4871,2241],{"class":1105},[1088,4873,1110],{"class":1109},[1088,4875,4821],{"class":1230},[1088,4877,4475],{"class":1109},[1088,4879,4880,4882,4884,4886,4888,4890,4892,4895,4897,4899],{"class":1090,"line":2756},[1088,4881,4828],{"class":1236},[1088,4883,1222],{"class":1109},[1088,4885,1205],{"class":1230},[1088,4887,1110],{"class":1109},[1088,4889,4837],{"class":1230},[1088,4891,1201],{"class":1109},[1088,4893,4894],{"class":1236},"quantity_in_stock__gte",[1088,4896,1222],{"class":1109},[1088,4898,2167],{"class":1242},[1088,4900,1566],{"class":1109},[1088,4902,4903,4905,4907,4909,4912],{"class":1090,"line":2770},[1088,4904,4853],{"class":1236},[1088,4906,1222],{"class":1109},[1088,4908,1394],{"class":1372},[1088,4910,4911],{"class":1376},"positive_stock",[1088,4913,3495],{"class":1372},[1088,4915,4916],{"class":1090,"line":2796},[1088,4917,4867],{"class":1109},[1088,4919,4920],{"class":1090,"line":2825},[1088,4921,2343],{"class":1109},[1088,4923,4924],{"class":1090,"line":2830},[1088,4925,1349],{"class":1105},[1088,4927,4928,4930,4932,4934,4936],{"class":1090,"line":2848},[1088,4929,1413],{"class":1193},[1088,4931,1417],{"class":1416},[1088,4933,1201],{"class":1109},[1088,4935,1423],{"class":1422},[1088,4937,1213],{"class":1109},[1088,4939,4940,4942,4944,4946],{"class":1090,"line":2880},[1088,4941,1431],{"class":1101},[1088,4943,1435],{"class":1434},[1088,4945,1110],{"class":1109},[1088,4947,1441],{"class":1440},[1088,4949,4950],{"class":1090,"line":2911},[1088,4951,1349],{"class":1105},[1088,4953,4954,4956],{"class":1090,"line":2952},[1088,4955,2679],{"class":1109},[1088,4957,2682],{"class":2646},[1088,4959,4960,4962,4965,4967,4969],{"class":1090,"line":2957},[1088,4961,1413],{"class":1193},[1088,4963,4964],{"class":1454}," is_in_stock",[1088,4966,1201],{"class":1109},[1088,4968,1423],{"class":1422},[1088,4970,1213],{"class":1109},[1088,4972,4973,4975,4977,4979,4982,4984],{"class":1090,"line":2966},[1088,4974,1431],{"class":1101},[1088,4976,1435],{"class":1434},[1088,4978,1110],{"class":1109},[1088,4980,4981],{"class":1440},"quantity_in_stock",[1088,4983,2622],{"class":2451},[1088,4985,4986],{"class":1242}," 0\n",[1088,4988,4989],{"class":1090,"line":2983},[1088,4990,1349],{"class":1105},[1088,4992,4993,4995],{"class":1090,"line":2988},[1088,4994,2679],{"class":1109},[1088,4996,2682],{"class":2646},[1088,4998,4999,5001,5004,5006,5008],{"class":1090,"line":3001},[1088,5000,1413],{"class":1193},[1088,5002,5003],{"class":1454}," is_low_stock",[1088,5005,1201],{"class":1109},[1088,5007,1423],{"class":1422},[1088,5009,1213],{"class":1109},[1088,5011,5012,5014,5016,5018,5020,5022,5024,5026],{"class":1090,"line":3012},[1088,5013,1431],{"class":1101},[1088,5015,1435],{"class":1434},[1088,5017,1110],{"class":1109},[1088,5019,4981],{"class":1440},[1088,5021,2726],{"class":2451},[1088,5023,1435],{"class":1434},[1088,5025,1110],{"class":1109},[1088,5027,5028],{"class":1440},"minimum_stock_level\n",[1088,5030,5031],{"class":1090,"line":3017},[1088,5032,1349],{"class":1105},[1088,5034,5035,5037,5040,5042,5044],{"class":1090,"line":3030},[1088,5036,1413],{"class":1193},[1088,5038,5039],{"class":1454}," get_profit_margin",[1088,5041,1201],{"class":1109},[1088,5043,1423],{"class":1422},[1088,5045,1213],{"class":1109},[1088,5047,5048,5050,5052,5054,5057],{"class":1090,"line":3068},[1088,5049,2478],{"class":1101},[1088,5051,1435],{"class":1434},[1088,5053,1110],{"class":1109},[1088,5055,5056],{"class":1440},"cost",[1088,5058,1361],{"class":1109},[1088,5060,5061,5064,5067,5069,5071,5073,5076,5078,5080,5082,5084,5087,5089,5091,5093,5095,5097],{"class":1090,"line":3073},[1088,5062,5063],{"class":1101},"            return",[1088,5065,5066],{"class":1109}," ((",[1088,5068,1423],{"class":1434},[1088,5070,1110],{"class":1109},[1088,5072,4773],{"class":1440},[1088,5074,5075],{"class":2451}," -",[1088,5077,1435],{"class":1434},[1088,5079,1110],{"class":1109},[1088,5081,5056],{"class":1440},[1088,5083,2619],{"class":1109},[1088,5085,5086],{"class":2451}," /",[1088,5088,1435],{"class":1434},[1088,5090,1110],{"class":1109},[1088,5092,4773],{"class":1440},[1088,5094,2619],{"class":1109},[1088,5096,2452],{"class":2451},[1088,5098,5099],{"class":1242}," 100\n",[1088,5101,5102,5104],{"class":1090,"line":3091},[1088,5103,1431],{"class":1101},[1088,5105,3541],{"class":1254},[1088,5107,5108],{"class":1090,"line":3137},[1088,5109,1187],{"emptyLinePlaceholder":1186},[1088,5111,5112,5114,5117,5119,5121,5123,5125],{"class":1090,"line":3168},[1088,5113,1194],{"class":1193},[1088,5115,5116],{"class":1197}," ProductImage",[1088,5118,1201],{"class":1109},[1088,5120,1205],{"class":1204},[1088,5122,1110],{"class":1109},[1088,5124,1210],{"class":1204},[1088,5126,1213],{"class":1109},[1088,5128,5129,5132,5134,5136,5138,5140,5142,5145,5147,5149,5151,5153,5155,5157,5159,5161,5163,5165,5168,5170],{"class":1090,"line":3233},[1088,5130,5131],{"class":1105},"    product ",[1088,5133,1222],{"class":1109},[1088,5135,1225],{"class":1105},[1088,5137,1110],{"class":1109},[1088,5139,1694],{"class":1230},[1088,5141,1201],{"class":1109},[1088,5143,5144],{"class":1230},"Product",[1088,5146,1246],{"class":1109},[1088,5148,1704],{"class":1236},[1088,5150,1222],{"class":1109},[1088,5152,1205],{"class":1230},[1088,5154,1110],{"class":1109},[1088,5156,1714],{"class":1713},[1088,5158,1246],{"class":1109},[1088,5160,1719],{"class":1236},[1088,5162,1222],{"class":1109},[1088,5164,1394],{"class":1372},[1088,5166,5167],{"class":1376},"images",[1088,5169,1394],{"class":1372},[1088,5171,1258],{"class":1109},[1088,5173,5174,5177,5179,5181,5183,5185,5187,5189,5191,5193,5196,5198],{"class":1090,"line":3248},[1088,5175,5176],{"class":1105},"    image ",[1088,5178,1222],{"class":1109},[1088,5180,1225],{"class":1105},[1088,5182,1110],{"class":1109},[1088,5184,1896],{"class":1230},[1088,5186,1201],{"class":1109},[1088,5188,1901],{"class":1236},[1088,5190,1222],{"class":1109},[1088,5192,1394],{"class":1372},[1088,5194,5195],{"class":1376},"products/gallery/",[1088,5197,1394],{"class":1372},[1088,5199,1258],{"class":1109},[1088,5201,5202,5205,5207,5209,5211,5213,5215,5217,5219,5221],{"class":1090,"line":3274},[1088,5203,5204],{"class":1105},"    alt_text ",[1088,5206,1222],{"class":1109},[1088,5208,1225],{"class":1105},[1088,5210,1110],{"class":1109},[1088,5212,1231],{"class":1230},[1088,5214,1201],{"class":1109},[1088,5216,1237],{"class":1236},[1088,5218,1222],{"class":1109},[1088,5220,1646],{"class":1242},[1088,5222,1258],{"class":1109},[1088,5224,5225,5228,5230,5232,5234,5236,5238,5240,5242,5244],{"class":1090,"line":3297},[1088,5226,5227],{"class":1105},"    is_primary ",[1088,5229,1222],{"class":1109},[1088,5231,1225],{"class":1105},[1088,5233,1110],{"class":1109},[1088,5235,3260],{"class":1230},[1088,5237,1201],{"class":1109},[1088,5239,2162],{"class":1236},[1088,5241,1222],{"class":1109},[1088,5243,3269],{"class":1254},[1088,5245,1258],{"class":1109},[1088,5247,5248,5251,5253,5255,5257,5259,5261,5263,5265,5267],{"class":1090,"line":3320},[1088,5249,5250],{"class":1105},"    order ",[1088,5252,1222],{"class":1109},[1088,5254,1225],{"class":1105},[1088,5256,1110],{"class":1109},[1088,5258,3972],{"class":1230},[1088,5260,1201],{"class":1109},[1088,5262,2162],{"class":1236},[1088,5264,1222],{"class":1109},[1088,5266,2167],{"class":1242},[1088,5268,1258],{"class":1109},[1088,5270,5271],{"class":1090,"line":3325},[1088,5272,1349],{"class":1105},[1088,5274,5275,5277,5279],{"class":1090,"line":3334},[1088,5276,1355],{"class":1193},[1088,5278,1358],{"class":1197},[1088,5280,1361],{"class":1109},[1088,5282,5283,5285,5287,5289,5291,5294,5296,5298,5300,5303,5305],{"class":1090,"line":3352},[1088,5284,1386],{"class":1105},[1088,5286,1222],{"class":1109},[1088,5288,1391],{"class":1109},[1088,5290,1394],{"class":1372},[1088,5292,5293],{"class":1376},"order",[1088,5295,1394],{"class":1372},[1088,5297,1246],{"class":1109},[1088,5299,1558],{"class":1372},[1088,5301,5302],{"class":1376},"id",[1088,5304,1394],{"class":1372},[1088,5306,1402],{"class":1109},[1088,5308,5309,5312,5314,5317,5319,5322,5324,5326,5328,5330,5332],{"class":1090,"line":3361},[1088,5310,5311],{"class":1105},"        unique_together ",[1088,5313,1222],{"class":1109},[1088,5315,5316],{"class":1109}," [[",[1088,5318,1394],{"class":1372},[1088,5320,5321],{"class":1376},"product",[1088,5323,1394],{"class":1372},[1088,5325,1246],{"class":1109},[1088,5327,1558],{"class":1372},[1088,5329,5293],{"class":1376},[1088,5331,1394],{"class":1372},[1088,5333,5334],{"class":1109},"]]\n",[1088,5336,5337],{"class":1090,"line":3394},[1088,5338,1349],{"class":1105},[1088,5340,5341,5343,5345,5347,5349],{"class":1090,"line":3425},[1088,5342,1413],{"class":1193},[1088,5344,1417],{"class":1416},[1088,5346,1201],{"class":1109},[1088,5348,1423],{"class":1422},[1088,5350,1213],{"class":1109},[1088,5352,5353,5355,5357,5359,5361,5363,5365,5367,5369,5371,5373,5376,5378,5380,5382,5384,5386],{"class":1090,"line":3430},[1088,5354,1431],{"class":1101},[1088,5356,3453],{"class":1193},[1088,5358,1394],{"class":1376},[1088,5360,3460],{"class":3459},[1088,5362,1423],{"class":1434},[1088,5364,1110],{"class":1109},[1088,5366,5321],{"class":1440},[1088,5368,1110],{"class":1109},[1088,5370,1397],{"class":1440},[1088,5372,3474],{"class":3459},[1088,5374,5375],{"class":1376}," - Image ",[1088,5377,3460],{"class":3459},[1088,5379,1423],{"class":1434},[1088,5381,1110],{"class":1109},[1088,5383,5293],{"class":1440},[1088,5385,3474],{"class":3459},[1088,5387,3495],{"class":1376},[1088,5389,5390],{"class":1090,"line":3435},[1088,5391,1187],{"emptyLinePlaceholder":1186},[1088,5393,5394,5396,5399,5401,5403,5405,5407],{"class":1090,"line":3448},[1088,5395,1194],{"class":1193},[1088,5397,5398],{"class":1197}," ProductReview",[1088,5400,1201],{"class":1109},[1088,5402,1205],{"class":1204},[1088,5404,1110],{"class":1109},[1088,5406,1210],{"class":1204},[1088,5408,1213],{"class":1109},[1088,5410,5411,5413,5415,5417,5419,5421,5423,5425,5427,5429,5431,5433,5435,5437,5439,5441,5443,5445,5448,5450],{"class":1090,"line":3498},[1088,5412,5131],{"class":1105},[1088,5414,1222],{"class":1109},[1088,5416,1225],{"class":1105},[1088,5418,1110],{"class":1109},[1088,5420,1694],{"class":1230},[1088,5422,1201],{"class":1109},[1088,5424,5144],{"class":1230},[1088,5426,1246],{"class":1109},[1088,5428,1704],{"class":1236},[1088,5430,1222],{"class":1109},[1088,5432,1205],{"class":1230},[1088,5434,1110],{"class":1109},[1088,5436,1714],{"class":1713},[1088,5438,1246],{"class":1109},[1088,5440,1719],{"class":1236},[1088,5442,1222],{"class":1109},[1088,5444,1394],{"class":1372},[1088,5446,5447],{"class":1376},"reviews",[1088,5449,1394],{"class":1372},[1088,5451,1258],{"class":1109},[1088,5453,5454,5457,5459,5461,5463,5465,5467,5469,5471,5473,5475,5477,5479,5481],{"class":1090,"line":3503},[1088,5455,5456],{"class":1105},"    user ",[1088,5458,1222],{"class":1109},[1088,5460,1225],{"class":1105},[1088,5462,1110],{"class":1109},[1088,5464,1694],{"class":1230},[1088,5466,1201],{"class":1109},[1088,5468,1699],{"class":1230},[1088,5470,1246],{"class":1109},[1088,5472,1704],{"class":1236},[1088,5474,1222],{"class":1109},[1088,5476,1205],{"class":1230},[1088,5478,1110],{"class":1109},[1088,5480,1714],{"class":1713},[1088,5482,1258],{"class":1109},[1088,5484,5485,5487,5489,5491,5493,5495],{"class":1090,"line":3510},[1088,5486,4601],{"class":1105},[1088,5488,1222],{"class":1109},[1088,5490,1225],{"class":1105},[1088,5492,1110],{"class":1109},[1088,5494,3972],{"class":1230},[1088,5496,4475],{"class":1109},[1088,5498,5499,5501,5503,5505,5507,5509,5511,5513,5515,5517],{"class":1090,"line":3524},[1088,5500,4503],{"class":1236},[1088,5502,2254],{"class":1109},[1088,5504,4643],{"class":1230},[1088,5506,1201],{"class":1109},[1088,5508,2806],{"class":1242},[1088,5510,4651],{"class":1109},[1088,5512,3598],{"class":1230},[1088,5514,1201],{"class":1109},[1088,5516,3981],{"class":1242},[1088,5518,5519],{"class":1109},")]\n",[1088,5521,5523],{"class":1090,"line":5522},123,[1088,5524,4592],{"class":1109},[1088,5526,5528,5530,5532,5534,5536,5538,5540,5542,5544,5546],{"class":1090,"line":5527},124,[1088,5529,1629],{"class":1105},[1088,5531,1222],{"class":1109},[1088,5533,1225],{"class":1105},[1088,5535,1110],{"class":1109},[1088,5537,1231],{"class":1230},[1088,5539,1201],{"class":1109},[1088,5541,1237],{"class":1236},[1088,5543,1222],{"class":1109},[1088,5545,1646],{"class":1242},[1088,5547,1258],{"class":1109},[1088,5549,5551,5553,5555,5557,5559,5561],{"class":1090,"line":5550},125,[1088,5552,1788],{"class":1105},[1088,5554,1222],{"class":1109},[1088,5556,1225],{"class":1105},[1088,5558,1110],{"class":1109},[1088,5560,1306],{"class":1230},[1088,5562,1799],{"class":1109},[1088,5564,5566,5569,5571,5573,5575,5577,5579,5581,5583,5585],{"class":1090,"line":5565},126,[1088,5567,5568],{"class":1105},"    is_verified_purchase ",[1088,5570,1222],{"class":1109},[1088,5572,1225],{"class":1105},[1088,5574,1110],{"class":1109},[1088,5576,3260],{"class":1230},[1088,5578,1201],{"class":1109},[1088,5580,2162],{"class":1236},[1088,5582,1222],{"class":1109},[1088,5584,3269],{"class":1254},[1088,5586,1258],{"class":1109},[1088,5588,5590,5593,5595,5597,5599,5601,5603,5605,5607,5609],{"class":1090,"line":5589},127,[1088,5591,5592],{"class":1105},"    helpful_votes ",[1088,5594,1222],{"class":1109},[1088,5596,1225],{"class":1105},[1088,5598,1110],{"class":1109},[1088,5600,2157],{"class":1230},[1088,5602,1201],{"class":1109},[1088,5604,2162],{"class":1236},[1088,5606,1222],{"class":1109},[1088,5608,2167],{"class":1242},[1088,5610,1258],{"class":1109},[1088,5612,5614,5616,5618,5620,5622,5624,5626,5628,5630,5632],{"class":1090,"line":5613},128,[1088,5615,1323],{"class":1105},[1088,5617,1222],{"class":1109},[1088,5619,1225],{"class":1105},[1088,5621,1110],{"class":1109},[1088,5623,1332],{"class":1230},[1088,5625,1201],{"class":1109},[1088,5627,1337],{"class":1236},[1088,5629,1222],{"class":1109},[1088,5631,1255],{"class":1254},[1088,5633,1258],{"class":1109},[1088,5635,5637],{"class":1090,"line":5636},129,[1088,5638,1349],{"class":1105},[1088,5640,5642,5644,5646],{"class":1090,"line":5641},130,[1088,5643,1355],{"class":1193},[1088,5645,1358],{"class":1197},[1088,5647,1361],{"class":1109},[1088,5649,5651,5653,5655,5657,5659,5661,5663,5665,5667,5670,5672],{"class":1090,"line":5650},131,[1088,5652,5311],{"class":1105},[1088,5654,1222],{"class":1109},[1088,5656,5316],{"class":1109},[1088,5658,1394],{"class":1372},[1088,5660,5321],{"class":1376},[1088,5662,1394],{"class":1372},[1088,5664,1246],{"class":1109},[1088,5666,1558],{"class":1372},[1088,5668,5669],{"class":1376},"user",[1088,5671,1394],{"class":1372},[1088,5673,5334],{"class":1109},[1088,5675,5677,5679,5681,5683,5685,5687,5689],{"class":1090,"line":5676},132,[1088,5678,1386],{"class":1105},[1088,5680,1222],{"class":1109},[1088,5682,1391],{"class":1109},[1088,5684,1394],{"class":1372},[1088,5686,2221],{"class":1376},[1088,5688,1394],{"class":1372},[1088,5690,1402],{"class":1109},[1088,5692,5694],{"class":1090,"line":5693},133,[1088,5695,1349],{"class":1105},[1088,5697,5699,5701,5703,5705,5707],{"class":1090,"line":5698},134,[1088,5700,1413],{"class":1193},[1088,5702,1417],{"class":1416},[1088,5704,1201],{"class":1109},[1088,5706,1423],{"class":1422},[1088,5708,1213],{"class":1109},[1088,5710,5712,5714,5716,5718,5720,5722,5724,5727,5729,5732,5734,5736,5738,5740,5742],{"class":1090,"line":5711},135,[1088,5713,1431],{"class":1101},[1088,5715,3453],{"class":1193},[1088,5717,1394],{"class":1376},[1088,5719,3460],{"class":3459},[1088,5721,1423],{"class":1434},[1088,5723,1110],{"class":1109},[1088,5725,5726],{"class":1440},"rating",[1088,5728,3474],{"class":3459},[1088,5730,5731],{"class":1376},"★ - ",[1088,5733,3460],{"class":3459},[1088,5735,1423],{"class":1434},[1088,5737,1110],{"class":1109},[1088,5739,3490],{"class":1440},[1088,5741,3474],{"class":3459},[1088,5743,3495],{"class":1376},[1030,5745,5747],{"id":5746},"model-relationships","Model Relationships",[1038,5749,5751],{"id":5750},"foreign-keys-and-one-to-many","Foreign Keys and One-to-Many",[1078,5753,5755],{"className":1080,"code":5754,"language":1082,"meta":1083,"style":1083},"# models.py\nfrom django.db import models\nfrom django.contrib.auth.models import User\n\nclass Author(models.Model):\n    user = models.OneToOneField(User, on_delete=models.CASCADE)\n    bio = models.TextField(blank=True)\n    website = models.URLField(blank=True)\n    birth_date = models.DateField(null=True, blank=True)\n    \n    def __str__(self):\n        return self.user.get_full_name() or self.user.username\n\nclass Publisher(models.Model):\n    name = models.CharField(max_length=200)\n    address = models.TextField()\n    city = models.CharField(max_length=100)\n    country = models.CharField(max_length=100)\n    website = models.URLField(blank=True)\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    # Foreign Key relationships\n    author = models.ForeignKey(\n        Author, \n        on_delete=models.CASCADE,\n        related_name='books'\n    )\n    publisher = models.ForeignKey(\n        Publisher,\n        on_delete=models.SET_NULL,\n        null=True,\n        blank=True,\n        related_name='books'\n    )\n    \n    publication_date = models.DateField()\n    pages = models.PositiveIntegerField()\n    price = models.DecimalField(max_digits=8, decimal_places=2)\n    \n    def __str__(self):\n        return self.title\n\n# Usage examples:\n# Get all books by an author\n# author = Author.objects.get(user__username='john_doe')\n# books = author.books.all()\n\n# Get publisher of a book\n# book = Book.objects.get(isbn='9781234567890')\n# publisher = book.publisher\n\n# Get all books from a publisher\n# publisher = Publisher.objects.get(name='Penguin')\n# books = publisher.books.all()\n",[1085,5756,5757,5761,5775,5797,5801,5818,5849,5872,5896,5927,5931,5943,5975,5979,5996,6018,6033,6056,6079,6101,6105,6117,6127,6131,6148,6170,6202,6206,6211,6225,6235,6250,6264,6268,6283,6290,6304,6314,6324,6336,6340,6344,6359,6374,6405,6409,6421,6431,6435,6440,6445,6450,6455,6459,6464,6469,6474,6478,6483,6488],{"__ignoreMap":1083},[1088,5758,5759],{"class":1090,"line":1091},[1088,5760,1095],{"class":1094},[1088,5762,5763,5765,5767,5769,5771,5773],{"class":1090,"line":1098},[1088,5764,1102],{"class":1101},[1088,5766,1106],{"class":1105},[1088,5768,1110],{"class":1109},[1088,5770,1113],{"class":1105},[1088,5772,1116],{"class":1101},[1088,5774,1119],{"class":1105},[1088,5776,5777,5779,5781,5783,5785,5787,5789,5791,5793,5795],{"class":1090,"line":1122},[1088,5778,1102],{"class":1101},[1088,5780,1106],{"class":1105},[1088,5782,1110],{"class":1109},[1088,5784,1131],{"class":1105},[1088,5786,1110],{"class":1109},[1088,5788,1136],{"class":1105},[1088,5790,1110],{"class":1109},[1088,5792,1141],{"class":1105},[1088,5794,1116],{"class":1101},[1088,5796,1146],{"class":1105},[1088,5798,5799],{"class":1090,"line":1149},[1088,5800,1187],{"emptyLinePlaceholder":1186},[1088,5802,5803,5805,5808,5810,5812,5814,5816],{"class":1090,"line":1166},[1088,5804,1194],{"class":1193},[1088,5806,5807],{"class":1197}," Author",[1088,5809,1201],{"class":1109},[1088,5811,1205],{"class":1204},[1088,5813,1110],{"class":1109},[1088,5815,1210],{"class":1204},[1088,5817,1213],{"class":1109},[1088,5819,5820,5822,5824,5826,5828,5831,5833,5835,5837,5839,5841,5843,5845,5847],{"class":1090,"line":1183},[1088,5821,5456],{"class":1105},[1088,5823,1222],{"class":1109},[1088,5825,1225],{"class":1105},[1088,5827,1110],{"class":1109},[1088,5829,5830],{"class":1230},"OneToOneField",[1088,5832,1201],{"class":1109},[1088,5834,1699],{"class":1230},[1088,5836,1246],{"class":1109},[1088,5838,1704],{"class":1236},[1088,5840,1222],{"class":1109},[1088,5842,1205],{"class":1230},[1088,5844,1110],{"class":1109},[1088,5846,1714],{"class":1713},[1088,5848,1258],{"class":1109},[1088,5850,5851,5854,5856,5858,5860,5862,5864,5866,5868,5870],{"class":1090,"line":1190},[1088,5852,5853],{"class":1105},"    bio ",[1088,5855,1222],{"class":1109},[1088,5857,1225],{"class":1105},[1088,5859,1110],{"class":1109},[1088,5861,1306],{"class":1230},[1088,5863,1201],{"class":1109},[1088,5865,1311],{"class":1236},[1088,5867,1222],{"class":1109},[1088,5869,1255],{"class":1254},[1088,5871,1258],{"class":1109},[1088,5873,5874,5877,5879,5881,5883,5886,5888,5890,5892,5894],{"class":1090,"line":1216},[1088,5875,5876],{"class":1105},"    website ",[1088,5878,1222],{"class":1109},[1088,5880,1225],{"class":1105},[1088,5882,1110],{"class":1109},[1088,5884,5885],{"class":1230},"URLField",[1088,5887,1201],{"class":1109},[1088,5889,1311],{"class":1236},[1088,5891,1222],{"class":1109},[1088,5893,1255],{"class":1254},[1088,5895,1258],{"class":1109},[1088,5897,5898,5901,5903,5905,5907,5909,5911,5913,5915,5917,5919,5921,5923,5925],{"class":1090,"line":1261},[1088,5899,5900],{"class":1105},"    birth_date ",[1088,5902,1222],{"class":1109},[1088,5904,1225],{"class":1105},[1088,5906,1110],{"class":1109},[1088,5908,4128],{"class":1230},[1088,5910,1201],{"class":1109},[1088,5912,2040],{"class":1236},[1088,5914,1222],{"class":1109},[1088,5916,1255],{"class":1254},[1088,5918,1246],{"class":1109},[1088,5920,1776],{"class":1236},[1088,5922,1222],{"class":1109},[1088,5924,1255],{"class":1254},[1088,5926,1258],{"class":1109},[1088,5928,5929],{"class":1090,"line":1294},[1088,5930,1349],{"class":1105},[1088,5932,5933,5935,5937,5939,5941],{"class":1090,"line":1320},[1088,5934,1413],{"class":1193},[1088,5936,1417],{"class":1416},[1088,5938,1201],{"class":1109},[1088,5940,1423],{"class":1422},[1088,5942,1213],{"class":1109},[1088,5944,5945,5947,5949,5951,5953,5955,5958,5961,5964,5966,5968,5970,5972],{"class":1090,"line":1346},[1088,5946,1431],{"class":1101},[1088,5948,1435],{"class":1434},[1088,5950,1110],{"class":1109},[1088,5952,5669],{"class":1440},[1088,5954,1110],{"class":1109},[1088,5956,5957],{"class":1230},"get_full_name",[1088,5959,5960],{"class":1109},"()",[1088,5962,5963],{"class":2451}," or",[1088,5965,1435],{"class":1434},[1088,5967,1110],{"class":1109},[1088,5969,5669],{"class":1440},[1088,5971,1110],{"class":1109},[1088,5973,5974],{"class":1440},"username\n",[1088,5976,5977],{"class":1090,"line":1352},[1088,5978,1187],{"emptyLinePlaceholder":1186},[1088,5980,5981,5983,5986,5988,5990,5992,5994],{"class":1090,"line":1364},[1088,5982,1194],{"class":1193},[1088,5984,5985],{"class":1197}," Publisher",[1088,5987,1201],{"class":1109},[1088,5989,1205],{"class":1204},[1088,5991,1110],{"class":1109},[1088,5993,1210],{"class":1204},[1088,5995,1213],{"class":1109},[1088,5997,5998,6000,6002,6004,6006,6008,6010,6012,6014,6016],{"class":1090,"line":1383},[1088,5999,1219],{"class":1105},[1088,6001,1222],{"class":1109},[1088,6003,1225],{"class":1105},[1088,6005,1110],{"class":1109},[1088,6007,1231],{"class":1230},[1088,6009,1201],{"class":1109},[1088,6011,1237],{"class":1236},[1088,6013,1222],{"class":1109},[1088,6015,1646],{"class":1242},[1088,6017,1258],{"class":1109},[1088,6019,6020,6023,6025,6027,6029,6031],{"class":1090,"line":1405},[1088,6021,6022],{"class":1105},"    address ",[1088,6024,1222],{"class":1109},[1088,6026,1225],{"class":1105},[1088,6028,1110],{"class":1109},[1088,6030,1306],{"class":1230},[1088,6032,1799],{"class":1109},[1088,6034,6035,6038,6040,6042,6044,6046,6048,6050,6052,6054],{"class":1090,"line":1410},[1088,6036,6037],{"class":1105},"    city ",[1088,6039,1222],{"class":1109},[1088,6041,1225],{"class":1105},[1088,6043,1110],{"class":1109},[1088,6045,1231],{"class":1230},[1088,6047,1201],{"class":1109},[1088,6049,1237],{"class":1236},[1088,6051,1222],{"class":1109},[1088,6053,1243],{"class":1242},[1088,6055,1258],{"class":1109},[1088,6057,6058,6061,6063,6065,6067,6069,6071,6073,6075,6077],{"class":1090,"line":1428},[1088,6059,6060],{"class":1105},"    country ",[1088,6062,1222],{"class":1109},[1088,6064,1225],{"class":1105},[1088,6066,1110],{"class":1109},[1088,6068,1231],{"class":1230},[1088,6070,1201],{"class":1109},[1088,6072,1237],{"class":1236},[1088,6074,1222],{"class":1109},[1088,6076,1243],{"class":1242},[1088,6078,1258],{"class":1109},[1088,6080,6081,6083,6085,6087,6089,6091,6093,6095,6097,6099],{"class":1090,"line":1444},[1088,6082,5876],{"class":1105},[1088,6084,1222],{"class":1109},[1088,6086,1225],{"class":1105},[1088,6088,1110],{"class":1109},[1088,6090,5885],{"class":1230},[1088,6092,1201],{"class":1109},[1088,6094,1311],{"class":1236},[1088,6096,1222],{"class":1109},[1088,6098,1255],{"class":1254},[1088,6100,1258],{"class":1109},[1088,6102,6103],{"class":1090,"line":1449},[1088,6104,1349],{"class":1105},[1088,6106,6107,6109,6111,6113,6115],{"class":1090,"line":1464},[1088,6108,1413],{"class":1193},[1088,6110,1417],{"class":1416},[1088,6112,1201],{"class":1109},[1088,6114,1423],{"class":1422},[1088,6116,1213],{"class":1109},[1088,6118,6119,6121,6123,6125],{"class":1090,"line":1508},[1088,6120,1431],{"class":1101},[1088,6122,1435],{"class":1434},[1088,6124,1110],{"class":1109},[1088,6126,1441],{"class":1440},[1088,6128,6129],{"class":1090,"line":1513},[1088,6130,1187],{"emptyLinePlaceholder":1186},[1088,6132,6133,6135,6138,6140,6142,6144,6146],{"class":1090,"line":1531},[1088,6134,1194],{"class":1193},[1088,6136,6137],{"class":1197}," Book",[1088,6139,1201],{"class":1109},[1088,6141,1205],{"class":1204},[1088,6143,1110],{"class":1109},[1088,6145,1210],{"class":1204},[1088,6147,1213],{"class":1109},[1088,6149,6150,6152,6154,6156,6158,6160,6162,6164,6166,6168],{"class":1090,"line":1543},[1088,6151,1629],{"class":1105},[1088,6153,1222],{"class":1109},[1088,6155,1225],{"class":1105},[1088,6157,1110],{"class":1109},[1088,6159,1231],{"class":1230},[1088,6161,1201],{"class":1109},[1088,6163,1237],{"class":1236},[1088,6165,1222],{"class":1109},[1088,6167,1646],{"class":1242},[1088,6169,1258],{"class":1109},[1088,6171,6172,6175,6177,6179,6181,6183,6185,6187,6189,6192,6194,6196,6198,6200],{"class":1090,"line":1569},[1088,6173,6174],{"class":1105},"    isbn ",[1088,6176,1222],{"class":1109},[1088,6178,1225],{"class":1105},[1088,6180,1110],{"class":1109},[1088,6182,1231],{"class":1230},[1088,6184,1201],{"class":1109},[1088,6186,1237],{"class":1236},[1088,6188,1222],{"class":1109},[1088,6190,6191],{"class":1242},"13",[1088,6193,1246],{"class":1109},[1088,6195,1249],{"class":1236},[1088,6197,1222],{"class":1109},[1088,6199,1255],{"class":1254},[1088,6201,1258],{"class":1109},[1088,6203,6204],{"class":1090,"line":1592},[1088,6205,1349],{"class":1105},[1088,6207,6208],{"class":1090,"line":1615},[1088,6209,6210],{"class":1094},"    # Foreign Key relationships\n",[1088,6212,6213,6215,6217,6219,6221,6223],{"class":1090,"line":1621},[1088,6214,1685],{"class":1105},[1088,6216,1222],{"class":1109},[1088,6218,1225],{"class":1105},[1088,6220,1110],{"class":1109},[1088,6222,1694],{"class":1230},[1088,6224,4475],{"class":1109},[1088,6226,6227,6230,6232],{"class":1090,"line":1626},[1088,6228,6229],{"class":1230},"        Author",[1088,6231,1246],{"class":1109},[1088,6233,6234],{"class":1230}," \n",[1088,6236,6237,6240,6242,6244,6246,6248],{"class":1090,"line":1651},[1088,6238,6239],{"class":1236},"        on_delete",[1088,6241,1222],{"class":1109},[1088,6243,1205],{"class":1230},[1088,6245,1110],{"class":1109},[1088,6247,1714],{"class":1713},[1088,6249,4487],{"class":1109},[1088,6251,6252,6255,6257,6259,6262],{"class":1090,"line":1682},[1088,6253,6254],{"class":1236},"        related_name",[1088,6256,1222],{"class":1109},[1088,6258,1394],{"class":1372},[1088,6260,6261],{"class":1376},"books",[1088,6263,3495],{"class":1372},[1088,6265,6266],{"class":1090,"line":1733},[1088,6267,4592],{"class":1109},[1088,6269,6270,6273,6275,6277,6279,6281],{"class":1090,"line":1785},[1088,6271,6272],{"class":1105},"    publisher ",[1088,6274,1222],{"class":1109},[1088,6276,1225],{"class":1105},[1088,6278,1110],{"class":1109},[1088,6280,1694],{"class":1230},[1088,6282,4475],{"class":1109},[1088,6284,6285,6288],{"class":1090,"line":1802},[1088,6286,6287],{"class":1230},"        Publisher",[1088,6289,4487],{"class":1109},[1088,6291,6292,6294,6296,6298,6300,6302],{"class":1090,"line":1835},[1088,6293,6239],{"class":1236},[1088,6295,1222],{"class":1109},[1088,6297,1205],{"class":1230},[1088,6299,1110],{"class":1109},[1088,6301,1762],{"class":1713},[1088,6303,4487],{"class":1109},[1088,6305,6306,6308,6310,6312],{"class":1090,"line":1884},[1088,6307,4666],{"class":1236},[1088,6309,1222],{"class":1109},[1088,6311,1255],{"class":1254},[1088,6313,4487],{"class":1109},[1088,6315,6316,6318,6320,6322],{"class":1090,"line":1931},[1088,6317,4677],{"class":1236},[1088,6319,1222],{"class":1109},[1088,6321,1255],{"class":1254},[1088,6323,4487],{"class":1109},[1088,6325,6326,6328,6330,6332,6334],{"class":1090,"line":1965},[1088,6327,6254],{"class":1236},[1088,6329,1222],{"class":1109},[1088,6331,1394],{"class":1372},[1088,6333,6261],{"class":1376},[1088,6335,3495],{"class":1372},[1088,6337,6338],{"class":1090,"line":1970},[1088,6339,4592],{"class":1109},[1088,6341,6342],{"class":1090,"line":1976},[1088,6343,1349],{"class":1105},[1088,6345,6346,6349,6351,6353,6355,6357],{"class":1090,"line":1999},[1088,6347,6348],{"class":1105},"    publication_date ",[1088,6350,1222],{"class":1109},[1088,6352,1225],{"class":1105},[1088,6354,1110],{"class":1109},[1088,6356,4128],{"class":1230},[1088,6358,1799],{"class":1109},[1088,6360,6361,6364,6366,6368,6370,6372],{"class":1090,"line":2024},[1088,6362,6363],{"class":1105},"    pages ",[1088,6365,1222],{"class":1109},[1088,6367,1225],{"class":1105},[1088,6369,1110],{"class":1109},[1088,6371,2157],{"class":1230},[1088,6373,1799],{"class":1109},[1088,6375,6376,6378,6380,6382,6384,6386,6388,6390,6392,6395,6397,6399,6401,6403],{"class":1090,"line":2057},[1088,6377,3827],{"class":1105},[1088,6379,1222],{"class":1109},[1088,6381,1225],{"class":1105},[1088,6383,1110],{"class":1109},[1088,6385,3836],{"class":1230},[1088,6387,1201],{"class":1109},[1088,6389,3841],{"class":1236},[1088,6391,1222],{"class":1109},[1088,6393,6394],{"class":1242},"8",[1088,6396,1246],{"class":1109},[1088,6398,3850],{"class":1236},[1088,6400,1222],{"class":1109},[1088,6402,3855],{"class":1242},[1088,6404,1258],{"class":1109},[1088,6406,6407],{"class":1090,"line":2062},[1088,6408,1349],{"class":1105},[1088,6410,6411,6413,6415,6417,6419],{"class":1090,"line":2068},[1088,6412,1413],{"class":1193},[1088,6414,1417],{"class":1416},[1088,6416,1201],{"class":1109},[1088,6418,1423],{"class":1422},[1088,6420,1213],{"class":1109},[1088,6422,6423,6425,6427,6429],{"class":1090,"line":2101},[1088,6424,1431],{"class":1101},[1088,6426,1435],{"class":1434},[1088,6428,1110],{"class":1109},[1088,6430,2373],{"class":1440},[1088,6432,6433],{"class":1090,"line":2134},[1088,6434,1187],{"emptyLinePlaceholder":1186},[1088,6436,6437],{"class":1090,"line":2139},[1088,6438,6439],{"class":1094},"# Usage examples:\n",[1088,6441,6442],{"class":1090,"line":2145},[1088,6443,6444],{"class":1094},"# Get all books by an author\n",[1088,6446,6447],{"class":1090,"line":2172},[1088,6448,6449],{"class":1094},"# author = Author.objects.get(user__username='john_doe')\n",[1088,6451,6452],{"class":1090,"line":2196},[1088,6453,6454],{"class":1094},"# books = author.books.all()\n",[1088,6456,6457],{"class":1090,"line":2201},[1088,6458,1187],{"emptyLinePlaceholder":1186},[1088,6460,6461],{"class":1090,"line":2210},[1088,6462,6463],{"class":1094},"# Get publisher of a book\n",[1088,6465,6466],{"class":1090,"line":2228},[1088,6467,6468],{"class":1094},"# book = Book.objects.get(isbn='9781234567890')\n",[1088,6470,6471],{"class":1090,"line":2238},[1088,6472,6473],{"class":1094},"# publisher = book.publisher\n",[1088,6475,6476],{"class":1090,"line":2276},[1088,6477,1187],{"emptyLinePlaceholder":1186},[1088,6479,6480],{"class":1090,"line":2308},[1088,6481,6482],{"class":1094},"# Get all books from a publisher\n",[1088,6484,6485],{"class":1090,"line":2340},[1088,6486,6487],{"class":1094},"# publisher = Publisher.objects.get(name='Penguin')\n",[1088,6489,6490],{"class":1090,"line":2346},[1088,6491,6492],{"class":1094},"# books = publisher.books.all()\n",[1038,6494,6496],{"id":6495},"many-to-many-relationships","Many-to-Many Relationships",[1078,6498,6500],{"className":1080,"code":6499,"language":1082,"meta":1083,"style":1083},"# models.py\nfrom django.db import models\n\nclass Genre(models.Model):\n    name = models.CharField(max_length=100, unique=True)\n    description = models.TextField(blank=True)\n    \n    def __str__(self):\n        return self.name\n\nclass Movie(models.Model):\n    title = models.CharField(max_length=200)\n    release_date = models.DateField()\n    duration = models.PositiveIntegerField(help_text=\"Duration in minutes\")\n    \n    # Simple many-to-many\n    genres = models.ManyToManyField(Genre, related_name='movies')\n    \n    def __str__(self):\n        return self.title\n\nclass Actor(models.Model):\n    name = models.CharField(max_length=200)\n    birth_date = models.DateField()\n    \n    def __str__(self):\n        return self.name\n\n# Many-to-many with through model for additional fields\nclass MovieCast(models.Model):\n    ROLE_CHOICES = [\n        ('lead', 'Lead Role'),\n        ('supporting', 'Supporting Role'),\n        ('cameo', 'Cameo'),\n    ]\n    \n    movie = models.ForeignKey(Movie, on_delete=models.CASCADE)\n    actor = models.ForeignKey(Actor, on_delete=models.CASCADE)\n    character_name = models.CharField(max_length=200)\n    role_type = models.CharField(max_length=20, choices=ROLE_CHOICES)\n    billing_order = models.PositiveSmallIntegerField()\n    \n    class Meta:\n        unique_together = [['movie', 'actor']]\n        ordering = ['billing_order']\n    \n    def __str__(self):\n        return f'{self.actor.name} as {self.character_name} in {self.movie.title}'\n\n# Update Movie model to use through relationship\nclass Movie(models.Model):\n    title = models.CharField(max_length=200)\n    release_date = models.DateField()\n    duration = models.PositiveIntegerField(help_text=\"Duration in minutes\")\n    \n    # Simple many-to-many\n    genres = models.ManyToManyField(Genre, related_name='movies')\n    \n    # Many-to-many with through model\n    actors = models.ManyToManyField(\n        Actor,\n        through='MovieCast',\n        related_name='movies'\n    )\n    \n    def __str__(self):\n        return self.title\n\n# Usage examples:\n# Add genres to a movie\n# movie = Movie.objects.get(title='The Matrix')\n# action_genre = Genre.objects.get(name='Action')\n# sci_fi_genre = Genre.objects.get(name='Science Fiction')\n# movie.genres.add(action_genre, sci_fi_genre)\n\n# Add actor with role information\n# MovieCast.objects.create(\n#     movie=movie,\n#     actor=keanu_reeves,\n#     character_name='Neo',\n#     role_type='lead',\n#     billing_order=1\n# )\n\n# Get all movies in a genre\n# action_movies = Genre.objects.get(name='Action').movies.all()\n\n# Get cast for a movie\n# cast = MovieCast.objects.filter(movie=movie).order_by('billing_order')\n",[1085,6501,6502,6506,6520,6524,6541,6571,6593,6597,6609,6619,6623,6640,6662,6677,6705,6709,6714,6747,6751,6763,6773,6777,6794,6816,6830,6834,6846,6856,6860,6865,6882,6891,6913,6935,6957,6961,6965,6997,7029,7052,7084,7099,7103,7111,7137,7154,7158,7170,7225,7229,7234,7250,7272,7286,7312,7316,7320,7350,7354,7359,7374,7381,7397,7409,7413,7417,7429,7439,7443,7447,7452,7457,7462,7467,7472,7476,7481,7486,7491,7496,7501,7506,7511,7516,7520,7525,7530,7534,7539],{"__ignoreMap":1083},[1088,6503,6504],{"class":1090,"line":1091},[1088,6505,1095],{"class":1094},[1088,6507,6508,6510,6512,6514,6516,6518],{"class":1090,"line":1098},[1088,6509,1102],{"class":1101},[1088,6511,1106],{"class":1105},[1088,6513,1110],{"class":1109},[1088,6515,1113],{"class":1105},[1088,6517,1116],{"class":1101},[1088,6519,1119],{"class":1105},[1088,6521,6522],{"class":1090,"line":1122},[1088,6523,1187],{"emptyLinePlaceholder":1186},[1088,6525,6526,6528,6531,6533,6535,6537,6539],{"class":1090,"line":1149},[1088,6527,1194],{"class":1193},[1088,6529,6530],{"class":1197}," Genre",[1088,6532,1201],{"class":1109},[1088,6534,1205],{"class":1204},[1088,6536,1110],{"class":1109},[1088,6538,1210],{"class":1204},[1088,6540,1213],{"class":1109},[1088,6542,6543,6545,6547,6549,6551,6553,6555,6557,6559,6561,6563,6565,6567,6569],{"class":1090,"line":1166},[1088,6544,1219],{"class":1105},[1088,6546,1222],{"class":1109},[1088,6548,1225],{"class":1105},[1088,6550,1110],{"class":1109},[1088,6552,1231],{"class":1230},[1088,6554,1201],{"class":1109},[1088,6556,1237],{"class":1236},[1088,6558,1222],{"class":1109},[1088,6560,1243],{"class":1242},[1088,6562,1246],{"class":1109},[1088,6564,1249],{"class":1236},[1088,6566,1222],{"class":1109},[1088,6568,1255],{"class":1254},[1088,6570,1258],{"class":1109},[1088,6572,6573,6575,6577,6579,6581,6583,6585,6587,6589,6591],{"class":1090,"line":1183},[1088,6574,1297],{"class":1105},[1088,6576,1222],{"class":1109},[1088,6578,1225],{"class":1105},[1088,6580,1110],{"class":1109},[1088,6582,1306],{"class":1230},[1088,6584,1201],{"class":1109},[1088,6586,1311],{"class":1236},[1088,6588,1222],{"class":1109},[1088,6590,1255],{"class":1254},[1088,6592,1258],{"class":1109},[1088,6594,6595],{"class":1090,"line":1190},[1088,6596,1349],{"class":1105},[1088,6598,6599,6601,6603,6605,6607],{"class":1090,"line":1216},[1088,6600,1413],{"class":1193},[1088,6602,1417],{"class":1416},[1088,6604,1201],{"class":1109},[1088,6606,1423],{"class":1422},[1088,6608,1213],{"class":1109},[1088,6610,6611,6613,6615,6617],{"class":1090,"line":1261},[1088,6612,1431],{"class":1101},[1088,6614,1435],{"class":1434},[1088,6616,1110],{"class":1109},[1088,6618,1441],{"class":1440},[1088,6620,6621],{"class":1090,"line":1294},[1088,6622,1187],{"emptyLinePlaceholder":1186},[1088,6624,6625,6627,6630,6632,6634,6636,6638],{"class":1090,"line":1320},[1088,6626,1194],{"class":1193},[1088,6628,6629],{"class":1197}," Movie",[1088,6631,1201],{"class":1109},[1088,6633,1205],{"class":1204},[1088,6635,1110],{"class":1109},[1088,6637,1210],{"class":1204},[1088,6639,1213],{"class":1109},[1088,6641,6642,6644,6646,6648,6650,6652,6654,6656,6658,6660],{"class":1090,"line":1346},[1088,6643,1629],{"class":1105},[1088,6645,1222],{"class":1109},[1088,6647,1225],{"class":1105},[1088,6649,1110],{"class":1109},[1088,6651,1231],{"class":1230},[1088,6653,1201],{"class":1109},[1088,6655,1237],{"class":1236},[1088,6657,1222],{"class":1109},[1088,6659,1646],{"class":1242},[1088,6661,1258],{"class":1109},[1088,6663,6664,6667,6669,6671,6673,6675],{"class":1090,"line":1352},[1088,6665,6666],{"class":1105},"    release_date ",[1088,6668,1222],{"class":1109},[1088,6670,1225],{"class":1105},[1088,6672,1110],{"class":1109},[1088,6674,4128],{"class":1230},[1088,6676,1799],{"class":1109},[1088,6678,6679,6682,6684,6686,6688,6690,6692,6694,6696,6698,6701,6703],{"class":1090,"line":1364},[1088,6680,6681],{"class":1105},"    duration ",[1088,6683,1222],{"class":1109},[1088,6685,1225],{"class":1105},[1088,6687,1110],{"class":1109},[1088,6689,2157],{"class":1230},[1088,6691,1201],{"class":1109},[1088,6693,3923],{"class":1236},[1088,6695,1222],{"class":1109},[1088,6697,3928],{"class":1372},[1088,6699,6700],{"class":1376},"Duration in minutes",[1088,6702,3928],{"class":1372},[1088,6704,1258],{"class":1109},[1088,6706,6707],{"class":1090,"line":1383},[1088,6708,1349],{"class":1105},[1088,6710,6711],{"class":1090,"line":1405},[1088,6712,6713],{"class":1094},"    # Simple many-to-many\n",[1088,6715,6716,6719,6721,6723,6725,6727,6729,6732,6734,6736,6738,6740,6743,6745],{"class":1090,"line":1410},[1088,6717,6718],{"class":1105},"    genres ",[1088,6720,1222],{"class":1109},[1088,6722,1225],{"class":1105},[1088,6724,1110],{"class":1109},[1088,6726,1943],{"class":1230},[1088,6728,1201],{"class":1109},[1088,6730,6731],{"class":1230},"Genre",[1088,6733,1246],{"class":1109},[1088,6735,1719],{"class":1236},[1088,6737,1222],{"class":1109},[1088,6739,1394],{"class":1372},[1088,6741,6742],{"class":1376},"movies",[1088,6744,1394],{"class":1372},[1088,6746,1258],{"class":1109},[1088,6748,6749],{"class":1090,"line":1428},[1088,6750,1349],{"class":1105},[1088,6752,6753,6755,6757,6759,6761],{"class":1090,"line":1444},[1088,6754,1413],{"class":1193},[1088,6756,1417],{"class":1416},[1088,6758,1201],{"class":1109},[1088,6760,1423],{"class":1422},[1088,6762,1213],{"class":1109},[1088,6764,6765,6767,6769,6771],{"class":1090,"line":1449},[1088,6766,1431],{"class":1101},[1088,6768,1435],{"class":1434},[1088,6770,1110],{"class":1109},[1088,6772,2373],{"class":1440},[1088,6774,6775],{"class":1090,"line":1464},[1088,6776,1187],{"emptyLinePlaceholder":1186},[1088,6778,6779,6781,6784,6786,6788,6790,6792],{"class":1090,"line":1508},[1088,6780,1194],{"class":1193},[1088,6782,6783],{"class":1197}," Actor",[1088,6785,1201],{"class":1109},[1088,6787,1205],{"class":1204},[1088,6789,1110],{"class":1109},[1088,6791,1210],{"class":1204},[1088,6793,1213],{"class":1109},[1088,6795,6796,6798,6800,6802,6804,6806,6808,6810,6812,6814],{"class":1090,"line":1513},[1088,6797,1219],{"class":1105},[1088,6799,1222],{"class":1109},[1088,6801,1225],{"class":1105},[1088,6803,1110],{"class":1109},[1088,6805,1231],{"class":1230},[1088,6807,1201],{"class":1109},[1088,6809,1237],{"class":1236},[1088,6811,1222],{"class":1109},[1088,6813,1646],{"class":1242},[1088,6815,1258],{"class":1109},[1088,6817,6818,6820,6822,6824,6826,6828],{"class":1090,"line":1531},[1088,6819,5900],{"class":1105},[1088,6821,1222],{"class":1109},[1088,6823,1225],{"class":1105},[1088,6825,1110],{"class":1109},[1088,6827,4128],{"class":1230},[1088,6829,1799],{"class":1109},[1088,6831,6832],{"class":1090,"line":1543},[1088,6833,1349],{"class":1105},[1088,6835,6836,6838,6840,6842,6844],{"class":1090,"line":1569},[1088,6837,1413],{"class":1193},[1088,6839,1417],{"class":1416},[1088,6841,1201],{"class":1109},[1088,6843,1423],{"class":1422},[1088,6845,1213],{"class":1109},[1088,6847,6848,6850,6852,6854],{"class":1090,"line":1592},[1088,6849,1431],{"class":1101},[1088,6851,1435],{"class":1434},[1088,6853,1110],{"class":1109},[1088,6855,1441],{"class":1440},[1088,6857,6858],{"class":1090,"line":1615},[1088,6859,1187],{"emptyLinePlaceholder":1186},[1088,6861,6862],{"class":1090,"line":1621},[1088,6863,6864],{"class":1094},"# Many-to-many with through model for additional fields\n",[1088,6866,6867,6869,6872,6874,6876,6878,6880],{"class":1090,"line":1626},[1088,6868,1194],{"class":1193},[1088,6870,6871],{"class":1197}," MovieCast",[1088,6873,1201],{"class":1109},[1088,6875,1205],{"class":1204},[1088,6877,1110],{"class":1109},[1088,6879,1210],{"class":1204},[1088,6881,1213],{"class":1109},[1088,6883,6884,6887,6889],{"class":1090,"line":1651},[1088,6885,6886],{"class":1434},"    ROLE_CHOICES",[1088,6888,1537],{"class":1109},[1088,6890,1540],{"class":1109},[1088,6892,6893,6895,6897,6900,6902,6904,6906,6909,6911],{"class":1090,"line":1682},[1088,6894,1546],{"class":1109},[1088,6896,1394],{"class":1372},[1088,6898,6899],{"class":1376},"lead",[1088,6901,1394],{"class":1372},[1088,6903,1246],{"class":1109},[1088,6905,1558],{"class":1372},[1088,6907,6908],{"class":1376},"Lead Role",[1088,6910,1394],{"class":1372},[1088,6912,1566],{"class":1109},[1088,6914,6915,6917,6919,6922,6924,6926,6928,6931,6933],{"class":1090,"line":1733},[1088,6916,1546],{"class":1109},[1088,6918,1394],{"class":1372},[1088,6920,6921],{"class":1376},"supporting",[1088,6923,1394],{"class":1372},[1088,6925,1246],{"class":1109},[1088,6927,1558],{"class":1372},[1088,6929,6930],{"class":1376},"Supporting Role",[1088,6932,1394],{"class":1372},[1088,6934,1566],{"class":1109},[1088,6936,6937,6939,6941,6944,6946,6948,6950,6953,6955],{"class":1090,"line":1785},[1088,6938,1546],{"class":1109},[1088,6940,1394],{"class":1372},[1088,6942,6943],{"class":1376},"cameo",[1088,6945,1394],{"class":1372},[1088,6947,1246],{"class":1109},[1088,6949,1558],{"class":1372},[1088,6951,6952],{"class":1376},"Cameo",[1088,6954,1394],{"class":1372},[1088,6956,1566],{"class":1109},[1088,6958,6959],{"class":1090,"line":1802},[1088,6960,1618],{"class":1109},[1088,6962,6963],{"class":1090,"line":1835},[1088,6964,1349],{"class":1105},[1088,6966,6967,6970,6972,6974,6976,6978,6980,6983,6985,6987,6989,6991,6993,6995],{"class":1090,"line":1884},[1088,6968,6969],{"class":1105},"    movie ",[1088,6971,1222],{"class":1109},[1088,6973,1225],{"class":1105},[1088,6975,1110],{"class":1109},[1088,6977,1694],{"class":1230},[1088,6979,1201],{"class":1109},[1088,6981,6982],{"class":1230},"Movie",[1088,6984,1246],{"class":1109},[1088,6986,1704],{"class":1236},[1088,6988,1222],{"class":1109},[1088,6990,1205],{"class":1230},[1088,6992,1110],{"class":1109},[1088,6994,1714],{"class":1713},[1088,6996,1258],{"class":1109},[1088,6998,6999,7002,7004,7006,7008,7010,7012,7015,7017,7019,7021,7023,7025,7027],{"class":1090,"line":1931},[1088,7000,7001],{"class":1105},"    actor ",[1088,7003,1222],{"class":1109},[1088,7005,1225],{"class":1105},[1088,7007,1110],{"class":1109},[1088,7009,1694],{"class":1230},[1088,7011,1201],{"class":1109},[1088,7013,7014],{"class":1230},"Actor",[1088,7016,1246],{"class":1109},[1088,7018,1704],{"class":1236},[1088,7020,1222],{"class":1109},[1088,7022,1205],{"class":1230},[1088,7024,1110],{"class":1109},[1088,7026,1714],{"class":1713},[1088,7028,1258],{"class":1109},[1088,7030,7031,7034,7036,7038,7040,7042,7044,7046,7048,7050],{"class":1090,"line":1965},[1088,7032,7033],{"class":1105},"    character_name ",[1088,7035,1222],{"class":1109},[1088,7037,1225],{"class":1105},[1088,7039,1110],{"class":1109},[1088,7041,1231],{"class":1230},[1088,7043,1201],{"class":1109},[1088,7045,1237],{"class":1236},[1088,7047,1222],{"class":1109},[1088,7049,1646],{"class":1242},[1088,7051,1258],{"class":1109},[1088,7053,7054,7057,7059,7061,7063,7065,7067,7069,7071,7073,7075,7077,7079,7082],{"class":1090,"line":1970},[1088,7055,7056],{"class":1105},"    role_type ",[1088,7058,1222],{"class":1109},[1088,7060,1225],{"class":1105},[1088,7062,1110],{"class":1109},[1088,7064,1231],{"class":1230},[1088,7066,1201],{"class":1109},[1088,7068,1237],{"class":1236},[1088,7070,1222],{"class":1109},[1088,7072,4287],{"class":1242},[1088,7074,1246],{"class":1109},[1088,7076,1860],{"class":1236},[1088,7078,1222],{"class":1109},[1088,7080,7081],{"class":1865},"ROLE_CHOICES",[1088,7083,1258],{"class":1109},[1088,7085,7086,7089,7091,7093,7095,7097],{"class":1090,"line":1976},[1088,7087,7088],{"class":1105},"    billing_order ",[1088,7090,1222],{"class":1109},[1088,7092,1225],{"class":1105},[1088,7094,1110],{"class":1109},[1088,7096,3972],{"class":1230},[1088,7098,1799],{"class":1109},[1088,7100,7101],{"class":1090,"line":1999},[1088,7102,1349],{"class":1105},[1088,7104,7105,7107,7109],{"class":1090,"line":2024},[1088,7106,1355],{"class":1193},[1088,7108,1358],{"class":1197},[1088,7110,1361],{"class":1109},[1088,7112,7113,7115,7117,7119,7121,7124,7126,7128,7130,7133,7135],{"class":1090,"line":2057},[1088,7114,5311],{"class":1105},[1088,7116,1222],{"class":1109},[1088,7118,5316],{"class":1109},[1088,7120,1394],{"class":1372},[1088,7122,7123],{"class":1376},"movie",[1088,7125,1394],{"class":1372},[1088,7127,1246],{"class":1109},[1088,7129,1558],{"class":1372},[1088,7131,7132],{"class":1376},"actor",[1088,7134,1394],{"class":1372},[1088,7136,5334],{"class":1109},[1088,7138,7139,7141,7143,7145,7147,7150,7152],{"class":1090,"line":2062},[1088,7140,1386],{"class":1105},[1088,7142,1222],{"class":1109},[1088,7144,1391],{"class":1109},[1088,7146,1394],{"class":1372},[1088,7148,7149],{"class":1376},"billing_order",[1088,7151,1394],{"class":1372},[1088,7153,1402],{"class":1109},[1088,7155,7156],{"class":1090,"line":2068},[1088,7157,1349],{"class":1105},[1088,7159,7160,7162,7164,7166,7168],{"class":1090,"line":2101},[1088,7161,1413],{"class":1193},[1088,7163,1417],{"class":1416},[1088,7165,1201],{"class":1109},[1088,7167,1423],{"class":1422},[1088,7169,1213],{"class":1109},[1088,7171,7172,7174,7176,7178,7180,7182,7184,7186,7188,7190,7192,7195,7197,7199,7201,7204,7206,7209,7211,7213,7215,7217,7219,7221,7223],{"class":1090,"line":2134},[1088,7173,1431],{"class":1101},[1088,7175,3453],{"class":1193},[1088,7177,1394],{"class":1376},[1088,7179,3460],{"class":3459},[1088,7181,1423],{"class":1434},[1088,7183,1110],{"class":1109},[1088,7185,7132],{"class":1440},[1088,7187,1110],{"class":1109},[1088,7189,1397],{"class":1440},[1088,7191,3474],{"class":3459},[1088,7193,7194],{"class":1376}," as ",[1088,7196,3460],{"class":3459},[1088,7198,1423],{"class":1434},[1088,7200,1110],{"class":1109},[1088,7202,7203],{"class":1440},"character_name",[1088,7205,3474],{"class":3459},[1088,7207,7208],{"class":1376}," in ",[1088,7210,3460],{"class":3459},[1088,7212,1423],{"class":1434},[1088,7214,1110],{"class":1109},[1088,7216,7123],{"class":1440},[1088,7218,1110],{"class":1109},[1088,7220,3490],{"class":1440},[1088,7222,3474],{"class":3459},[1088,7224,3495],{"class":1376},[1088,7226,7227],{"class":1090,"line":2139},[1088,7228,1187],{"emptyLinePlaceholder":1186},[1088,7230,7231],{"class":1090,"line":2145},[1088,7232,7233],{"class":1094},"# Update Movie model to use through relationship\n",[1088,7235,7236,7238,7240,7242,7244,7246,7248],{"class":1090,"line":2172},[1088,7237,1194],{"class":1193},[1088,7239,6629],{"class":1197},[1088,7241,1201],{"class":1109},[1088,7243,1205],{"class":1204},[1088,7245,1110],{"class":1109},[1088,7247,1210],{"class":1204},[1088,7249,1213],{"class":1109},[1088,7251,7252,7254,7256,7258,7260,7262,7264,7266,7268,7270],{"class":1090,"line":2196},[1088,7253,1629],{"class":1105},[1088,7255,1222],{"class":1109},[1088,7257,1225],{"class":1105},[1088,7259,1110],{"class":1109},[1088,7261,1231],{"class":1230},[1088,7263,1201],{"class":1109},[1088,7265,1237],{"class":1236},[1088,7267,1222],{"class":1109},[1088,7269,1646],{"class":1242},[1088,7271,1258],{"class":1109},[1088,7273,7274,7276,7278,7280,7282,7284],{"class":1090,"line":2201},[1088,7275,6666],{"class":1105},[1088,7277,1222],{"class":1109},[1088,7279,1225],{"class":1105},[1088,7281,1110],{"class":1109},[1088,7283,4128],{"class":1230},[1088,7285,1799],{"class":1109},[1088,7287,7288,7290,7292,7294,7296,7298,7300,7302,7304,7306,7308,7310],{"class":1090,"line":2210},[1088,7289,6681],{"class":1105},[1088,7291,1222],{"class":1109},[1088,7293,1225],{"class":1105},[1088,7295,1110],{"class":1109},[1088,7297,2157],{"class":1230},[1088,7299,1201],{"class":1109},[1088,7301,3923],{"class":1236},[1088,7303,1222],{"class":1109},[1088,7305,3928],{"class":1372},[1088,7307,6700],{"class":1376},[1088,7309,3928],{"class":1372},[1088,7311,1258],{"class":1109},[1088,7313,7314],{"class":1090,"line":2228},[1088,7315,1349],{"class":1105},[1088,7317,7318],{"class":1090,"line":2238},[1088,7319,6713],{"class":1094},[1088,7321,7322,7324,7326,7328,7330,7332,7334,7336,7338,7340,7342,7344,7346,7348],{"class":1090,"line":2276},[1088,7323,6718],{"class":1105},[1088,7325,1222],{"class":1109},[1088,7327,1225],{"class":1105},[1088,7329,1110],{"class":1109},[1088,7331,1943],{"class":1230},[1088,7333,1201],{"class":1109},[1088,7335,6731],{"class":1230},[1088,7337,1246],{"class":1109},[1088,7339,1719],{"class":1236},[1088,7341,1222],{"class":1109},[1088,7343,1394],{"class":1372},[1088,7345,6742],{"class":1376},[1088,7347,1394],{"class":1372},[1088,7349,1258],{"class":1109},[1088,7351,7352],{"class":1090,"line":2308},[1088,7353,1349],{"class":1105},[1088,7355,7356],{"class":1090,"line":2340},[1088,7357,7358],{"class":1094},"    # Many-to-many with through model\n",[1088,7360,7361,7364,7366,7368,7370,7372],{"class":1090,"line":2346},[1088,7362,7363],{"class":1105},"    actors ",[1088,7365,1222],{"class":1109},[1088,7367,1225],{"class":1105},[1088,7369,1110],{"class":1109},[1088,7371,1943],{"class":1230},[1088,7373,4475],{"class":1109},[1088,7375,7376,7379],{"class":1090,"line":2351},[1088,7377,7378],{"class":1230},"        Actor",[1088,7380,4487],{"class":1109},[1088,7382,7383,7386,7388,7390,7393,7395],{"class":1090,"line":2364},[1088,7384,7385],{"class":1236},"        through",[1088,7387,1222],{"class":1109},[1088,7389,1394],{"class":1372},[1088,7391,7392],{"class":1376},"MovieCast",[1088,7394,1394],{"class":1372},[1088,7396,4487],{"class":1109},[1088,7398,7399,7401,7403,7405,7407],{"class":1090,"line":2376},[1088,7400,6254],{"class":1236},[1088,7402,1222],{"class":1109},[1088,7404,1394],{"class":1372},[1088,7406,6742],{"class":1376},[1088,7408,3495],{"class":1372},[1088,7410,7411],{"class":1090,"line":2381},[1088,7412,4592],{"class":1109},[1088,7414,7415],{"class":1090,"line":2394},[1088,7416,1349],{"class":1105},[1088,7418,7419,7421,7423,7425,7427],{"class":1090,"line":2432},[1088,7420,1413],{"class":1193},[1088,7422,1417],{"class":1416},[1088,7424,1201],{"class":1109},[1088,7426,1423],{"class":1422},[1088,7428,1213],{"class":1109},[1088,7430,7431,7433,7435,7437],{"class":1090,"line":2437},[1088,7432,1431],{"class":1101},[1088,7434,1435],{"class":1434},[1088,7436,1110],{"class":1109},[1088,7438,2373],{"class":1440},[1088,7440,7441],{"class":1090,"line":2469},[1088,7442,1187],{"emptyLinePlaceholder":1186},[1088,7444,7445],{"class":1090,"line":2475},[1088,7446,6439],{"class":1094},[1088,7448,7449],{"class":1090,"line":2510},[1088,7450,7451],{"class":1094},"# Add genres to a movie\n",[1088,7453,7454],{"class":1090,"line":2532},[1088,7455,7456],{"class":1094},"# movie = Movie.objects.get(title='The Matrix')\n",[1088,7458,7459],{"class":1090,"line":2538},[1088,7460,7461],{"class":1094},"# action_genre = Genre.objects.get(name='Action')\n",[1088,7463,7464],{"class":1090,"line":2544},[1088,7465,7466],{"class":1094},"# sci_fi_genre = Genre.objects.get(name='Science Fiction')\n",[1088,7468,7469],{"class":1090,"line":2569},[1088,7470,7471],{"class":1094},"# movie.genres.add(action_genre, sci_fi_genre)\n",[1088,7473,7474],{"class":1090,"line":2638},[1088,7475,1187],{"emptyLinePlaceholder":1186},[1088,7477,7478],{"class":1090,"line":2643},[1088,7479,7480],{"class":1094},"# Add actor with role information\n",[1088,7482,7483],{"class":1090,"line":2671},[1088,7484,7485],{"class":1094},"# MovieCast.objects.create(\n",[1088,7487,7488],{"class":1090,"line":2676},[1088,7489,7490],{"class":1094},"#     movie=movie,\n",[1088,7492,7493],{"class":1090,"line":2685},[1088,7494,7495],{"class":1094},"#     actor=keanu_reeves,\n",[1088,7497,7498],{"class":1090,"line":2699},[1088,7499,7500],{"class":1094},"#     character_name='Neo',\n",[1088,7502,7503],{"class":1090,"line":2737},[1088,7504,7505],{"class":1094},"#     role_type='lead',\n",[1088,7507,7508],{"class":1090,"line":2742},[1088,7509,7510],{"class":1094},"#     billing_order=1\n",[1088,7512,7513],{"class":1090,"line":2756},[1088,7514,7515],{"class":1094},"# )\n",[1088,7517,7518],{"class":1090,"line":2770},[1088,7519,1187],{"emptyLinePlaceholder":1186},[1088,7521,7522],{"class":1090,"line":2796},[1088,7523,7524],{"class":1094},"# Get all movies in a genre\n",[1088,7526,7527],{"class":1090,"line":2825},[1088,7528,7529],{"class":1094},"# action_movies = Genre.objects.get(name='Action').movies.all()\n",[1088,7531,7532],{"class":1090,"line":2830},[1088,7533,1187],{"emptyLinePlaceholder":1186},[1088,7535,7536],{"class":1090,"line":2848},[1088,7537,7538],{"class":1094},"# Get cast for a movie\n",[1088,7540,7541],{"class":1090,"line":2880},[1088,7542,7543],{"class":1094},"# cast = MovieCast.objects.filter(movie=movie).order_by('billing_order')\n",[1030,7545,7547],{"id":7546},"model-methods-and-properties","Model Methods and Properties",[1038,7549,7551],{"id":7550},"custom-model-behavior","Custom Model Behavior",[1078,7553,7555],{"className":1080,"code":7554,"language":1082,"meta":1083,"style":1083},"# models.py\nfrom django.db import models\nfrom django.contrib.auth.models import User\nfrom django.utils import timezone\nfrom django.core.exceptions import ValidationError\nimport hashlib\n\nclass UserProfile(models.Model):\n    user = models.OneToOneField(User, on_delete=models.CASCADE)\n    birth_date = models.DateField(null=True, blank=True)\n    phone = models.CharField(max_length=20, blank=True)\n    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)\n    bio = models.TextField(max_length=500, blank=True)\n    location = models.CharField(max_length=100, blank=True)\n    website = models.URLField(blank=True)\n    \n    # Social media\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} Profile'\n    \n    def clean(self):\n        \"\"\"Custom validation\"\"\"\n        if self.birth_date and self.birth_date > timezone.now().date():\n            raise ValidationError('Birth date cannot be in the future.')\n        \n        if self.twitter_handle and not self.twitter_handle.startswith('@'):\n            self.twitter_handle = f'@{self.twitter_handle}'\n    \n    def save(self, *args, **kwargs):\n        self.full_clean()  # Run validation\n        super().save(*args, **kwargs)\n    \n    @property\n    def age(self):\n        \"\"\"Calculate age from birth date\"\"\"\n        if not self.birth_date:\n            return None\n        \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    \n    @property\n    def full_name(self):\n        \"\"\"Get user's full name\"\"\"\n        return self.user.get_full_name() or self.user.username\n    \n    @property\n    def avatar_url(self):\n        \"\"\"Get avatar URL or default gravatar\"\"\"\n        if self.avatar:\n            return self.avatar.url\n        \n        # Generate Gravatar URL\n        email_hash = hashlib.md5(self.user.email.lower().encode()).hexdigest()\n        return f'https://www.gravatar.com/avatar/{email_hash}?d=identicon&s=150'\n    \n    def get_social_links(self):\n        \"\"\"Return dictionary of social media links\"\"\"\n        links = {}\n        \n        if self.website:\n            links['website'] = self.website\n        \n        if self.twitter_handle:\n            links['twitter'] = f'https://twitter.com/{self.twitter_handle.lstrip(\"@\")}'\n        \n        if self.linkedin_url:\n            links['linkedin'] = self.linkedin_url\n        \n        return links\n    \n    def is_profile_complete(self):\n        \"\"\"Check if profile has minimum required information\"\"\"\n        required_fields = [\n            self.user.first_name,\n            self.user.last_name,\n            self.user.email,\n            self.bio,\n        ]\n        return all(field for field in required_fields)\n    \n    class Meta:\n        verbose_name = 'User Profile'\n        verbose_name_plural = 'User Profiles'\n\nclass Order(models.Model):\n    STATUS_CHOICES = [\n        ('pending', 'Pending'),\n        ('processing', 'Processing'),\n        ('shipped', 'Shipped'),\n        ('delivered', 'Delivered'),\n        ('cancelled', 'Cancelled'),\n        ('refunded', 'Refunded'),\n    ]\n    \n    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders')\n    order_number = models.CharField(max_length=20, unique=True, editable=False)\n    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending')\n    \n    # Pricing\n    subtotal = models.DecimalField(max_digits=10, decimal_places=2)\n    tax_amount = models.DecimalField(max_digits=10, decimal_places=2, default=0)\n    shipping_cost = models.DecimalField(max_digits=10, decimal_places=2, default=0)\n    discount_amount = models.DecimalField(max_digits=10, decimal_places=2, default=0)\n    \n    # Addresses\n    billing_address = models.TextField()\n    shipping_address = models.TextField()\n    \n    # Timestamps\n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n    shipped_at = models.DateTimeField(null=True, blank=True)\n    delivered_at = models.DateTimeField(null=True, blank=True)\n    \n    class Meta:\n        ordering = ['-created_at']\n    \n    def __str__(self):\n        return f'Order {self.order_number}'\n    \n    def save(self, *args, **kwargs):\n        if not self.order_number:\n            self.order_number = self.generate_order_number()\n        super().save(*args, **kwargs)\n    \n    def generate_order_number(self):\n        \"\"\"Generate unique order number\"\"\"\n        import random\n        import string\n        \n        while True:\n            number = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10))\n            if not Order.objects.filter(order_number=number).exists():\n                return number\n    \n    @property\n    def total_amount(self):\n        \"\"\"Calculate total order amount\"\"\"\n        return self.subtotal + self.tax_amount + self.shipping_cost - self.discount_amount\n    \n    @property\n    def is_paid(self):\n        \"\"\"Check if order is paid\"\"\"\n        return hasattr(self, 'payment') and self.payment.is_successful\n    \n    @property\n    def can_be_cancelled(self):\n        \"\"\"Check if order can be cancelled\"\"\"\n        return self.status in ['pending', 'processing']\n    \n    def get_status_display_class(self):\n        \"\"\"Get CSS class for status display\"\"\"\n        status_classes = {\n            'pending': 'warning',\n            'processing': 'info',\n            'shipped': 'primary',\n            'delivered': 'success',\n            'cancelled': 'danger',\n            'refunded': 'secondary',\n        }\n        return status_classes.get(self.status, 'secondary')\n    \n    def mark_as_shipped(self):\n        \"\"\"Mark order as shipped\"\"\"\n        if self.status == 'processing':\n            self.status = 'shipped'\n            self.shipped_at = timezone.now()\n            self.save()\n    \n    def mark_as_delivered(self):\n        \"\"\"Mark order as delivered\"\"\"\n        if self.status == 'shipped':\n            self.status = 'delivered'\n            self.delivered_at = timezone.now()\n            self.save()\n",[1085,7556,7557,7561,7575,7597,7611,7631,7638,7642,7659,7689,7719,7750,7794,7824,7855,7877,7881,7886,7917,7940,7944,7949,7972,7995,7999,8021,8043,8047,8059,8084,8088,8101,8110,8145,8164,8168,8205,8232,8236,8260,8275,8297,8301,8307,8320,8329,8343,8349,8353,8372,8401,8455,8460,8464,8470,8483,8492,8520,8524,8530,8543,8552,8565,8580,8584,8589,8635,8654,8658,8671,8680,8690,8694,8707,8731,8735,8747,8796,8800,8813,8837,8841,8848,8852,8865,8874,8883,8898,8913,8927,8938,8942,8968,8972,8980,8994,9007,9011,9028,9036,9058,9080,9102,9124,9146,9168,9172,9176,9219,9258,9300,9304,9309,9340,9379,9418,9457,9461,9466,9481,9496,9500,9504,9526,9548,9579,9610,9614,9622,9638,9642,9654,9676,9680,9704,9718,9738,9761,9766,9780,9790,9799,9807,9812,9823,9881,9918,9927,9932,9939,9953,9963,10002,10007,10014,10028,10038,10074,10079,10086,10100,10110,10142,10147,10161,10171,10182,10203,10223,10243,10263,10283,10303,10309,10340,10345,10359,10369,10390,10407,10427,10438,10443,10457,10467,10488,10505,10525],{"__ignoreMap":1083},[1088,7558,7559],{"class":1090,"line":1091},[1088,7560,1095],{"class":1094},[1088,7562,7563,7565,7567,7569,7571,7573],{"class":1090,"line":1098},[1088,7564,1102],{"class":1101},[1088,7566,1106],{"class":1105},[1088,7568,1110],{"class":1109},[1088,7570,1113],{"class":1105},[1088,7572,1116],{"class":1101},[1088,7574,1119],{"class":1105},[1088,7576,7577,7579,7581,7583,7585,7587,7589,7591,7593,7595],{"class":1090,"line":1122},[1088,7578,1102],{"class":1101},[1088,7580,1106],{"class":1105},[1088,7582,1110],{"class":1109},[1088,7584,1131],{"class":1105},[1088,7586,1110],{"class":1109},[1088,7588,1136],{"class":1105},[1088,7590,1110],{"class":1109},[1088,7592,1141],{"class":1105},[1088,7594,1116],{"class":1101},[1088,7596,1146],{"class":1105},[1088,7598,7599,7601,7603,7605,7607,7609],{"class":1090,"line":1149},[1088,7600,1102],{"class":1101},[1088,7602,1106],{"class":1105},[1088,7604,1110],{"class":1109},[1088,7606,1175],{"class":1105},[1088,7608,1116],{"class":1101},[1088,7610,1180],{"class":1105},[1088,7612,7613,7615,7617,7619,7621,7623,7626,7628],{"class":1090,"line":1166},[1088,7614,1102],{"class":1101},[1088,7616,1106],{"class":1105},[1088,7618,1110],{"class":1109},[1088,7620,3583],{"class":1105},[1088,7622,1110],{"class":1109},[1088,7624,7625],{"class":1105},"exceptions ",[1088,7627,1116],{"class":1101},[1088,7629,7630],{"class":1105}," ValidationError\n",[1088,7632,7633,7635],{"class":1090,"line":1183},[1088,7634,1116],{"class":1101},[1088,7636,7637],{"class":1105}," hashlib\n",[1088,7639,7640],{"class":1090,"line":1190},[1088,7641,1187],{"emptyLinePlaceholder":1186},[1088,7643,7644,7646,7649,7651,7653,7655,7657],{"class":1090,"line":1216},[1088,7645,1194],{"class":1193},[1088,7647,7648],{"class":1197}," UserProfile",[1088,7650,1201],{"class":1109},[1088,7652,1205],{"class":1204},[1088,7654,1110],{"class":1109},[1088,7656,1210],{"class":1204},[1088,7658,1213],{"class":1109},[1088,7660,7661,7663,7665,7667,7669,7671,7673,7675,7677,7679,7681,7683,7685,7687],{"class":1090,"line":1261},[1088,7662,5456],{"class":1105},[1088,7664,1222],{"class":1109},[1088,7666,1225],{"class":1105},[1088,7668,1110],{"class":1109},[1088,7670,5830],{"class":1230},[1088,7672,1201],{"class":1109},[1088,7674,1699],{"class":1230},[1088,7676,1246],{"class":1109},[1088,7678,1704],{"class":1236},[1088,7680,1222],{"class":1109},[1088,7682,1205],{"class":1230},[1088,7684,1110],{"class":1109},[1088,7686,1714],{"class":1713},[1088,7688,1258],{"class":1109},[1088,7690,7691,7693,7695,7697,7699,7701,7703,7705,7707,7709,7711,7713,7715,7717],{"class":1090,"line":1294},[1088,7692,5900],{"class":1105},[1088,7694,1222],{"class":1109},[1088,7696,1225],{"class":1105},[1088,7698,1110],{"class":1109},[1088,7700,4128],{"class":1230},[1088,7702,1201],{"class":1109},[1088,7704,2040],{"class":1236},[1088,7706,1222],{"class":1109},[1088,7708,1255],{"class":1254},[1088,7710,1246],{"class":1109},[1088,7712,1776],{"class":1236},[1088,7714,1222],{"class":1109},[1088,7716,1255],{"class":1254},[1088,7718,1258],{"class":1109},[1088,7720,7721,7724,7726,7728,7730,7732,7734,7736,7738,7740,7742,7744,7746,7748],{"class":1090,"line":1320},[1088,7722,7723],{"class":1105},"    phone ",[1088,7725,1222],{"class":1109},[1088,7727,1225],{"class":1105},[1088,7729,1110],{"class":1109},[1088,7731,1231],{"class":1230},[1088,7733,1201],{"class":1109},[1088,7735,1237],{"class":1236},[1088,7737,1222],{"class":1109},[1088,7739,4287],{"class":1242},[1088,7741,1246],{"class":1109},[1088,7743,1776],{"class":1236},[1088,7745,1222],{"class":1109},[1088,7747,1255],{"class":1254},[1088,7749,1258],{"class":1109},[1088,7751,7752,7755,7757,7759,7761,7763,7765,7767,7769,7771,7774,7776,7778,7780,7782,7784,7786,7788,7790,7792],{"class":1090,"line":1346},[1088,7753,7754],{"class":1105},"    avatar ",[1088,7756,1222],{"class":1109},[1088,7758,1225],{"class":1105},[1088,7760,1110],{"class":1109},[1088,7762,1896],{"class":1230},[1088,7764,1201],{"class":1109},[1088,7766,1901],{"class":1236},[1088,7768,1222],{"class":1109},[1088,7770,1394],{"class":1372},[1088,7772,7773],{"class":1376},"avatars/",[1088,7775,1394],{"class":1372},[1088,7777,1246],{"class":1109},[1088,7779,1776],{"class":1236},[1088,7781,1222],{"class":1109},[1088,7783,1255],{"class":1254},[1088,7785,1246],{"class":1109},[1088,7787,1767],{"class":1236},[1088,7789,1222],{"class":1109},[1088,7791,1255],{"class":1254},[1088,7793,1258],{"class":1109},[1088,7795,7796,7798,7800,7802,7804,7806,7808,7810,7812,7814,7816,7818,7820,7822],{"class":1090,"line":1352},[1088,7797,5853],{"class":1105},[1088,7799,1222],{"class":1109},[1088,7801,1225],{"class":1105},[1088,7803,1110],{"class":1109},[1088,7805,1306],{"class":1230},[1088,7807,1201],{"class":1109},[1088,7809,1237],{"class":1236},[1088,7811,1222],{"class":1109},[1088,7813,3773],{"class":1242},[1088,7815,1246],{"class":1109},[1088,7817,1776],{"class":1236},[1088,7819,1222],{"class":1109},[1088,7821,1255],{"class":1254},[1088,7823,1258],{"class":1109},[1088,7825,7826,7829,7831,7833,7835,7837,7839,7841,7843,7845,7847,7849,7851,7853],{"class":1090,"line":1364},[1088,7827,7828],{"class":1105},"    location ",[1088,7830,1222],{"class":1109},[1088,7832,1225],{"class":1105},[1088,7834,1110],{"class":1109},[1088,7836,1231],{"class":1230},[1088,7838,1201],{"class":1109},[1088,7840,1237],{"class":1236},[1088,7842,1222],{"class":1109},[1088,7844,1243],{"class":1242},[1088,7846,1246],{"class":1109},[1088,7848,1776],{"class":1236},[1088,7850,1222],{"class":1109},[1088,7852,1255],{"class":1254},[1088,7854,1258],{"class":1109},[1088,7856,7857,7859,7861,7863,7865,7867,7869,7871,7873,7875],{"class":1090,"line":1383},[1088,7858,5876],{"class":1105},[1088,7860,1222],{"class":1109},[1088,7862,1225],{"class":1105},[1088,7864,1110],{"class":1109},[1088,7866,5885],{"class":1230},[1088,7868,1201],{"class":1109},[1088,7870,1311],{"class":1236},[1088,7872,1222],{"class":1109},[1088,7874,1255],{"class":1254},[1088,7876,1258],{"class":1109},[1088,7878,7879],{"class":1090,"line":1405},[1088,7880,1349],{"class":1105},[1088,7882,7883],{"class":1090,"line":1410},[1088,7884,7885],{"class":1094},"    # Social media\n",[1088,7887,7888,7891,7893,7895,7897,7899,7901,7903,7905,7907,7909,7911,7913,7915],{"class":1090,"line":1428},[1088,7889,7890],{"class":1105},"    twitter_handle ",[1088,7892,1222],{"class":1109},[1088,7894,1225],{"class":1105},[1088,7896,1110],{"class":1109},[1088,7898,1231],{"class":1230},[1088,7900,1201],{"class":1109},[1088,7902,1237],{"class":1236},[1088,7904,1222],{"class":1109},[1088,7906,2867],{"class":1242},[1088,7908,1246],{"class":1109},[1088,7910,1776],{"class":1236},[1088,7912,1222],{"class":1109},[1088,7914,1255],{"class":1254},[1088,7916,1258],{"class":1109},[1088,7918,7919,7922,7924,7926,7928,7930,7932,7934,7936,7938],{"class":1090,"line":1444},[1088,7920,7921],{"class":1105},"    linkedin_url ",[1088,7923,1222],{"class":1109},[1088,7925,1225],{"class":1105},[1088,7927,1110],{"class":1109},[1088,7929,5885],{"class":1230},[1088,7931,1201],{"class":1109},[1088,7933,1311],{"class":1236},[1088,7935,1222],{"class":1109},[1088,7937,1255],{"class":1254},[1088,7939,1258],{"class":1109},[1088,7941,7942],{"class":1090,"line":1449},[1088,7943,1349],{"class":1105},[1088,7945,7946],{"class":1090,"line":1464},[1088,7947,7948],{"class":1094},"    # Preferences\n",[1088,7950,7951,7954,7956,7958,7960,7962,7964,7966,7968,7970],{"class":1090,"line":1508},[1088,7952,7953],{"class":1105},"    email_notifications ",[1088,7955,1222],{"class":1109},[1088,7957,1225],{"class":1105},[1088,7959,1110],{"class":1109},[1088,7961,3260],{"class":1230},[1088,7963,1201],{"class":1109},[1088,7965,2162],{"class":1236},[1088,7967,1222],{"class":1109},[1088,7969,1255],{"class":1254},[1088,7971,1258],{"class":1109},[1088,7973,7974,7977,7979,7981,7983,7985,7987,7989,7991,7993],{"class":1090,"line":1513},[1088,7975,7976],{"class":1105},"    newsletter_subscription ",[1088,7978,1222],{"class":1109},[1088,7980,1225],{"class":1105},[1088,7982,1110],{"class":1109},[1088,7984,3260],{"class":1230},[1088,7986,1201],{"class":1109},[1088,7988,2162],{"class":1236},[1088,7990,1222],{"class":1109},[1088,7992,3269],{"class":1254},[1088,7994,1258],{"class":1109},[1088,7996,7997],{"class":1090,"line":1531},[1088,7998,1349],{"class":1105},[1088,8000,8001,8003,8005,8007,8009,8011,8013,8015,8017,8019],{"class":1090,"line":1543},[1088,8002,1323],{"class":1105},[1088,8004,1222],{"class":1109},[1088,8006,1225],{"class":1105},[1088,8008,1110],{"class":1109},[1088,8010,1332],{"class":1230},[1088,8012,1201],{"class":1109},[1088,8014,1337],{"class":1236},[1088,8016,1222],{"class":1109},[1088,8018,1255],{"class":1254},[1088,8020,1258],{"class":1109},[1088,8022,8023,8025,8027,8029,8031,8033,8035,8037,8039,8041],{"class":1090,"line":1569},[1088,8024,2002],{"class":1105},[1088,8026,1222],{"class":1109},[1088,8028,1225],{"class":1105},[1088,8030,1110],{"class":1109},[1088,8032,1332],{"class":1230},[1088,8034,1201],{"class":1109},[1088,8036,2015],{"class":1236},[1088,8038,1222],{"class":1109},[1088,8040,1255],{"class":1254},[1088,8042,1258],{"class":1109},[1088,8044,8045],{"class":1090,"line":1592},[1088,8046,1349],{"class":1105},[1088,8048,8049,8051,8053,8055,8057],{"class":1090,"line":1615},[1088,8050,1413],{"class":1193},[1088,8052,1417],{"class":1416},[1088,8054,1201],{"class":1109},[1088,8056,1423],{"class":1422},[1088,8058,1213],{"class":1109},[1088,8060,8061,8063,8065,8067,8069,8071,8073,8075,8077,8079,8081],{"class":1090,"line":1621},[1088,8062,1431],{"class":1101},[1088,8064,3453],{"class":1193},[1088,8066,1394],{"class":1376},[1088,8068,3460],{"class":3459},[1088,8070,1423],{"class":1434},[1088,8072,1110],{"class":1109},[1088,8074,5669],{"class":1440},[1088,8076,1110],{"class":1109},[1088,8078,3471],{"class":1440},[1088,8080,3474],{"class":3459},[1088,8082,8083],{"class":1376}," Profile'\n",[1088,8085,8086],{"class":1090,"line":1626},[1088,8087,1349],{"class":1105},[1088,8089,8090,8092,8095,8097,8099],{"class":1090,"line":1651},[1088,8091,1413],{"class":1193},[1088,8093,8094],{"class":1454}," clean",[1088,8096,1201],{"class":1109},[1088,8098,1423],{"class":1422},[1088,8100,1213],{"class":1109},[1088,8102,8103,8105,8108],{"class":1090,"line":1682},[1088,8104,2760],{"class":2759},[1088,8106,8107],{"class":2763},"Custom validation",[1088,8109,2767],{"class":2759},[1088,8111,8112,8114,8116,8118,8121,8123,8125,8127,8129,8131,8133,8135,8137,8139,8142],{"class":1090,"line":1733},[1088,8113,2478],{"class":1101},[1088,8115,1435],{"class":1434},[1088,8117,1110],{"class":1109},[1088,8119,8120],{"class":1440},"birth_date",[1088,8122,2496],{"class":2451},[1088,8124,1435],{"class":1434},[1088,8126,1110],{"class":1109},[1088,8128,8120],{"class":1440},[1088,8130,2622],{"class":2451},[1088,8132,2522],{"class":1105},[1088,8134,1110],{"class":1109},[1088,8136,2527],{"class":1230},[1088,8138,2650],{"class":1109},[1088,8140,8141],{"class":1230},"date",[1088,8143,8144],{"class":1109},"():\n",[1088,8146,8147,8150,8153,8155,8157,8160,8162],{"class":1090,"line":1785},[1088,8148,8149],{"class":1101},"            raise",[1088,8151,8152],{"class":1230}," ValidationError",[1088,8154,1201],{"class":1109},[1088,8156,1394],{"class":1372},[1088,8158,8159],{"class":1376},"Birth date cannot be in the future.",[1088,8161,1394],{"class":1372},[1088,8163,1258],{"class":1109},[1088,8165,8166],{"class":1090,"line":1802},[1088,8167,2535],{"class":1105},[1088,8169,8170,8172,8174,8176,8179,8181,8183,8185,8187,8189,8191,8194,8196,8198,8201,8203],{"class":1090,"line":1835},[1088,8171,2478],{"class":1101},[1088,8173,1435],{"class":1434},[1088,8175,1110],{"class":1109},[1088,8177,8178],{"class":1440},"twitter_handle",[1088,8180,2496],{"class":2451},[1088,8182,2499],{"class":2451},[1088,8184,1435],{"class":1434},[1088,8186,1110],{"class":1109},[1088,8188,8178],{"class":1440},[1088,8190,1110],{"class":1109},[1088,8192,8193],{"class":1230},"startswith",[1088,8195,1201],{"class":1109},[1088,8197,1394],{"class":1372},[1088,8199,8200],{"class":1376},"@",[1088,8202,1394],{"class":1372},[1088,8204,1213],{"class":1109},[1088,8206,8207,8209,8211,8213,8215,8217,8220,8222,8224,8226,8228,8230],{"class":1090,"line":1884},[1088,8208,2513],{"class":1434},[1088,8210,1110],{"class":1109},[1088,8212,8178],{"class":1440},[1088,8214,1537],{"class":1109},[1088,8216,3453],{"class":1193},[1088,8218,8219],{"class":1376},"'@",[1088,8221,3460],{"class":3459},[1088,8223,1423],{"class":1434},[1088,8225,1110],{"class":1109},[1088,8227,8178],{"class":1440},[1088,8229,3474],{"class":3459},[1088,8231,3495],{"class":1376},[1088,8233,8234],{"class":1090,"line":1931},[1088,8235,1349],{"class":1105},[1088,8237,8238,8240,8242,8244,8246,8248,8250,8252,8254,8256,8258],{"class":1090,"line":1965},[1088,8239,1413],{"class":1193},[1088,8241,2442],{"class":1454},[1088,8243,1201],{"class":1109},[1088,8245,1423],{"class":1422},[1088,8247,1246],{"class":1109},[1088,8249,2452],{"class":2451},[1088,8251,2456],{"class":2455},[1088,8253,1246],{"class":1109},[1088,8255,2461],{"class":2451},[1088,8257,2464],{"class":2455},[1088,8259,1213],{"class":1109},[1088,8261,8262,8265,8267,8270,8272],{"class":1090,"line":1970},[1088,8263,8264],{"class":1434},"        self",[1088,8266,1110],{"class":1109},[1088,8268,8269],{"class":1230},"full_clean",[1088,8271,5960],{"class":1109},[1088,8273,8274],{"class":1094},"  # Run validation\n",[1088,8276,8277,8279,8281,8283,8285,8287,8289,8291,8293,8295],{"class":1090,"line":1976},[1088,8278,2647],{"class":2646},[1088,8280,2650],{"class":1109},[1088,8282,2653],{"class":1230},[1088,8284,1201],{"class":1109},[1088,8286,2658],{"class":2451},[1088,8288,2456],{"class":1230},[1088,8290,1246],{"class":1109},[1088,8292,2461],{"class":2451},[1088,8294,2464],{"class":1230},[1088,8296,1258],{"class":1109},[1088,8298,8299],{"class":1090,"line":1999},[1088,8300,1349],{"class":1105},[1088,8302,8303,8305],{"class":1090,"line":2024},[1088,8304,2679],{"class":1109},[1088,8306,2682],{"class":2646},[1088,8308,8309,8311,8314,8316,8318],{"class":1090,"line":2057},[1088,8310,1413],{"class":1193},[1088,8312,8313],{"class":1454}," age",[1088,8315,1201],{"class":1109},[1088,8317,1423],{"class":1422},[1088,8319,1213],{"class":1109},[1088,8321,8322,8324,8327],{"class":1090,"line":2062},[1088,8323,2760],{"class":2759},[1088,8325,8326],{"class":2763},"Calculate age from birth date",[1088,8328,2767],{"class":2759},[1088,8330,8331,8333,8335,8337,8339,8341],{"class":1090,"line":2068},[1088,8332,2478],{"class":1101},[1088,8334,2499],{"class":2451},[1088,8336,1435],{"class":1434},[1088,8338,1110],{"class":1109},[1088,8340,8120],{"class":1440},[1088,8342,1361],{"class":1109},[1088,8344,8345,8347],{"class":1090,"line":2101},[1088,8346,5063],{"class":1101},[1088,8348,3541],{"class":1254},[1088,8350,8351],{"class":1090,"line":2134},[1088,8352,2535],{"class":1105},[1088,8354,8355,8358,8360,8362,8364,8366,8368,8370],{"class":1090,"line":2139},[1088,8356,8357],{"class":1105},"        today ",[1088,8359,1222],{"class":1109},[1088,8361,2522],{"class":1105},[1088,8363,1110],{"class":1109},[1088,8365,2527],{"class":1230},[1088,8367,2650],{"class":1109},[1088,8369,8141],{"class":1230},[1088,8371,1799],{"class":1109},[1088,8373,8374,8376,8379,8381,8384,8386,8388,8390,8392,8394,8396,8398],{"class":1090,"line":2145},[1088,8375,1431],{"class":1101},[1088,8377,8378],{"class":1105}," today",[1088,8380,1110],{"class":1109},[1088,8382,8383],{"class":1440},"year",[1088,8385,5075],{"class":2451},[1088,8387,1435],{"class":1434},[1088,8389,1110],{"class":1109},[1088,8391,8120],{"class":1440},[1088,8393,1110],{"class":1109},[1088,8395,8383],{"class":1440},[1088,8397,5075],{"class":2451},[1088,8399,8400],{"class":1109}," (\n",[1088,8402,8403,8406,8409,8411,8414,8416,8418,8420,8423,8425,8428,8431,8433,8435,8437,8439,8441,8443,8445,8447,8449,8451,8453],{"class":1090,"line":2172},[1088,8404,8405],{"class":1109},"            (",[1088,8407,8408],{"class":1105},"today",[1088,8410,1110],{"class":1109},[1088,8412,8413],{"class":1440},"month",[1088,8415,1246],{"class":1109},[1088,8417,8378],{"class":1105},[1088,8419,1110],{"class":1109},[1088,8421,8422],{"class":1440},"day",[1088,8424,2619],{"class":1109},[1088,8426,8427],{"class":2451}," \u003C",[1088,8429,8430],{"class":1109}," (",[1088,8432,1423],{"class":1434},[1088,8434,1110],{"class":1109},[1088,8436,8120],{"class":1440},[1088,8438,1110],{"class":1109},[1088,8440,8413],{"class":1440},[1088,8442,1246],{"class":1109},[1088,8444,1435],{"class":1434},[1088,8446,1110],{"class":1109},[1088,8448,8120],{"class":1440},[1088,8450,1110],{"class":1109},[1088,8452,8422],{"class":1440},[1088,8454,1258],{"class":1109},[1088,8456,8457],{"class":1090,"line":2196},[1088,8458,8459],{"class":1109},"        )\n",[1088,8461,8462],{"class":1090,"line":2201},[1088,8463,1349],{"class":1105},[1088,8465,8466,8468],{"class":1090,"line":2210},[1088,8467,2679],{"class":1109},[1088,8469,2682],{"class":2646},[1088,8471,8472,8474,8477,8479,8481],{"class":1090,"line":2228},[1088,8473,1413],{"class":1193},[1088,8475,8476],{"class":1454}," full_name",[1088,8478,1201],{"class":1109},[1088,8480,1423],{"class":1422},[1088,8482,1213],{"class":1109},[1088,8484,8485,8487,8490],{"class":1090,"line":2238},[1088,8486,2760],{"class":2759},[1088,8488,8489],{"class":2763},"Get user's full name",[1088,8491,2767],{"class":2759},[1088,8493,8494,8496,8498,8500,8502,8504,8506,8508,8510,8512,8514,8516,8518],{"class":1090,"line":2276},[1088,8495,1431],{"class":1101},[1088,8497,1435],{"class":1434},[1088,8499,1110],{"class":1109},[1088,8501,5669],{"class":1440},[1088,8503,1110],{"class":1109},[1088,8505,5957],{"class":1230},[1088,8507,5960],{"class":1109},[1088,8509,5963],{"class":2451},[1088,8511,1435],{"class":1434},[1088,8513,1110],{"class":1109},[1088,8515,5669],{"class":1440},[1088,8517,1110],{"class":1109},[1088,8519,5974],{"class":1440},[1088,8521,8522],{"class":1090,"line":2308},[1088,8523,1349],{"class":1105},[1088,8525,8526,8528],{"class":1090,"line":2340},[1088,8527,2679],{"class":1109},[1088,8529,2682],{"class":2646},[1088,8531,8532,8534,8537,8539,8541],{"class":1090,"line":2346},[1088,8533,1413],{"class":1193},[1088,8535,8536],{"class":1454}," avatar_url",[1088,8538,1201],{"class":1109},[1088,8540,1423],{"class":1422},[1088,8542,1213],{"class":1109},[1088,8544,8545,8547,8550],{"class":1090,"line":2351},[1088,8546,2760],{"class":2759},[1088,8548,8549],{"class":2763},"Get avatar URL or default gravatar",[1088,8551,2767],{"class":2759},[1088,8553,8554,8556,8558,8560,8563],{"class":1090,"line":2364},[1088,8555,2478],{"class":1101},[1088,8557,1435],{"class":1434},[1088,8559,1110],{"class":1109},[1088,8561,8562],{"class":1440},"avatar",[1088,8564,1361],{"class":1109},[1088,8566,8567,8569,8571,8573,8575,8577],{"class":1090,"line":2376},[1088,8568,5063],{"class":1101},[1088,8570,1435],{"class":1434},[1088,8572,1110],{"class":1109},[1088,8574,8562],{"class":1440},[1088,8576,1110],{"class":1109},[1088,8578,8579],{"class":1440},"url\n",[1088,8581,8582],{"class":1090,"line":2381},[1088,8583,2535],{"class":1105},[1088,8585,8586],{"class":1090,"line":2394},[1088,8587,8588],{"class":1094},"        # Generate Gravatar URL\n",[1088,8590,8591,8594,8596,8599,8601,8604,8606,8608,8610,8612,8614,8617,8619,8622,8624,8627,8630,8633],{"class":1090,"line":2432},[1088,8592,8593],{"class":1105},"        email_hash ",[1088,8595,1222],{"class":1109},[1088,8597,8598],{"class":1105}," hashlib",[1088,8600,1110],{"class":1109},[1088,8602,8603],{"class":1230},"md5",[1088,8605,1201],{"class":1109},[1088,8607,1423],{"class":1434},[1088,8609,1110],{"class":1109},[1088,8611,5669],{"class":1440},[1088,8613,1110],{"class":1109},[1088,8615,8616],{"class":1440},"email",[1088,8618,1110],{"class":1109},[1088,8620,8621],{"class":1230},"lower",[1088,8623,2650],{"class":1109},[1088,8625,8626],{"class":1230},"encode",[1088,8628,8629],{"class":1109},"()).",[1088,8631,8632],{"class":1230},"hexdigest",[1088,8634,1799],{"class":1109},[1088,8636,8637,8639,8641,8644,8646,8649,8651],{"class":1090,"line":2437},[1088,8638,1431],{"class":1101},[1088,8640,3453],{"class":1193},[1088,8642,8643],{"class":1376},"'https://www.gravatar.com/avatar/",[1088,8645,3460],{"class":3459},[1088,8647,8648],{"class":1105},"email_hash",[1088,8650,3474],{"class":3459},[1088,8652,8653],{"class":1376},"?d=identicon&s=150'\n",[1088,8655,8656],{"class":1090,"line":2469},[1088,8657,1349],{"class":1105},[1088,8659,8660,8662,8665,8667,8669],{"class":1090,"line":2475},[1088,8661,1413],{"class":1193},[1088,8663,8664],{"class":1454}," get_social_links",[1088,8666,1201],{"class":1109},[1088,8668,1423],{"class":1422},[1088,8670,1213],{"class":1109},[1088,8672,8673,8675,8678],{"class":1090,"line":2510},[1088,8674,2760],{"class":2759},[1088,8676,8677],{"class":2763},"Return dictionary of social media links",[1088,8679,2767],{"class":2759},[1088,8681,8682,8685,8687],{"class":1090,"line":2532},[1088,8683,8684],{"class":1105},"        links ",[1088,8686,1222],{"class":1109},[1088,8688,8689],{"class":1109}," {}\n",[1088,8691,8692],{"class":1090,"line":2538},[1088,8693,2535],{"class":1105},[1088,8695,8696,8698,8700,8702,8705],{"class":1090,"line":2544},[1088,8697,2478],{"class":1101},[1088,8699,1435],{"class":1434},[1088,8701,1110],{"class":1109},[1088,8703,8704],{"class":1440},"website",[1088,8706,1361],{"class":1109},[1088,8708,8709,8712,8714,8716,8718,8720,8722,8724,8726,8728],{"class":1090,"line":2569},[1088,8710,8711],{"class":1105},"            links",[1088,8713,4533],{"class":1109},[1088,8715,1394],{"class":1372},[1088,8717,8704],{"class":1376},[1088,8719,1394],{"class":1372},[1088,8721,2592],{"class":1109},[1088,8723,1537],{"class":1109},[1088,8725,1435],{"class":1434},[1088,8727,1110],{"class":1109},[1088,8729,8730],{"class":1440},"website\n",[1088,8732,8733],{"class":1090,"line":2638},[1088,8734,2535],{"class":1105},[1088,8736,8737,8739,8741,8743,8745],{"class":1090,"line":2643},[1088,8738,2478],{"class":1101},[1088,8740,1435],{"class":1434},[1088,8742,1110],{"class":1109},[1088,8744,8178],{"class":1440},[1088,8746,1361],{"class":1109},[1088,8748,8749,8751,8753,8755,8758,8760,8762,8764,8766,8769,8771,8773,8775,8777,8779,8782,8784,8786,8788,8790,8792,8794],{"class":1090,"line":2671},[1088,8750,8711],{"class":1105},[1088,8752,4533],{"class":1109},[1088,8754,1394],{"class":1372},[1088,8756,8757],{"class":1376},"twitter",[1088,8759,1394],{"class":1372},[1088,8761,2592],{"class":1109},[1088,8763,1537],{"class":1109},[1088,8765,3453],{"class":1193},[1088,8767,8768],{"class":1376},"'https://twitter.com/",[1088,8770,3460],{"class":3459},[1088,8772,1423],{"class":1434},[1088,8774,1110],{"class":1109},[1088,8776,8178],{"class":1440},[1088,8778,1110],{"class":1109},[1088,8780,8781],{"class":1230},"lstrip",[1088,8783,1201],{"class":1109},[1088,8785,3928],{"class":1372},[1088,8787,8200],{"class":1376},[1088,8789,3928],{"class":1372},[1088,8791,2619],{"class":1109},[1088,8793,3474],{"class":3459},[1088,8795,3495],{"class":1376},[1088,8797,8798],{"class":1090,"line":2676},[1088,8799,2535],{"class":1105},[1088,8801,8802,8804,8806,8808,8811],{"class":1090,"line":2685},[1088,8803,2478],{"class":1101},[1088,8805,1435],{"class":1434},[1088,8807,1110],{"class":1109},[1088,8809,8810],{"class":1440},"linkedin_url",[1088,8812,1361],{"class":1109},[1088,8814,8815,8817,8819,8821,8824,8826,8828,8830,8832,8834],{"class":1090,"line":2699},[1088,8816,8711],{"class":1105},[1088,8818,4533],{"class":1109},[1088,8820,1394],{"class":1372},[1088,8822,8823],{"class":1376},"linkedin",[1088,8825,1394],{"class":1372},[1088,8827,2592],{"class":1109},[1088,8829,1537],{"class":1109},[1088,8831,1435],{"class":1434},[1088,8833,1110],{"class":1109},[1088,8835,8836],{"class":1440},"linkedin_url\n",[1088,8838,8839],{"class":1090,"line":2737},[1088,8840,2535],{"class":1105},[1088,8842,8843,8845],{"class":1090,"line":2742},[1088,8844,1431],{"class":1101},[1088,8846,8847],{"class":1105}," links\n",[1088,8849,8850],{"class":1090,"line":2756},[1088,8851,1349],{"class":1105},[1088,8853,8854,8856,8859,8861,8863],{"class":1090,"line":2770},[1088,8855,1413],{"class":1193},[1088,8857,8858],{"class":1454}," is_profile_complete",[1088,8860,1201],{"class":1109},[1088,8862,1423],{"class":1422},[1088,8864,1213],{"class":1109},[1088,8866,8867,8869,8872],{"class":1090,"line":2796},[1088,8868,2760],{"class":2759},[1088,8870,8871],{"class":2763},"Check if profile has minimum required information",[1088,8873,2767],{"class":2759},[1088,8875,8876,8879,8881],{"class":1090,"line":2825},[1088,8877,8878],{"class":1105},"        required_fields ",[1088,8880,1222],{"class":1109},[1088,8882,1540],{"class":1109},[1088,8884,8885,8887,8889,8891,8893,8896],{"class":1090,"line":2830},[1088,8886,2513],{"class":1434},[1088,8888,1110],{"class":1109},[1088,8890,5669],{"class":1440},[1088,8892,1110],{"class":1109},[1088,8894,8895],{"class":1440},"first_name",[1088,8897,4487],{"class":1109},[1088,8899,8900,8902,8904,8906,8908,8911],{"class":1090,"line":2848},[1088,8901,2513],{"class":1434},[1088,8903,1110],{"class":1109},[1088,8905,5669],{"class":1440},[1088,8907,1110],{"class":1109},[1088,8909,8910],{"class":1440},"last_name",[1088,8912,4487],{"class":1109},[1088,8914,8915,8917,8919,8921,8923,8925],{"class":1090,"line":2880},[1088,8916,2513],{"class":1434},[1088,8918,1110],{"class":1109},[1088,8920,5669],{"class":1440},[1088,8922,1110],{"class":1109},[1088,8924,8616],{"class":1440},[1088,8926,4487],{"class":1109},[1088,8928,8929,8931,8933,8936],{"class":1090,"line":2911},[1088,8930,2513],{"class":1434},[1088,8932,1110],{"class":1109},[1088,8934,8935],{"class":1440},"bio",[1088,8937,4487],{"class":1109},[1088,8939,8940],{"class":1090,"line":2952},[1088,8941,2343],{"class":1109},[1088,8943,8944,8946,8949,8951,8954,8957,8960,8963,8966],{"class":1090,"line":2957},[1088,8945,1431],{"class":1101},[1088,8947,8948],{"class":1416}," all",[1088,8950,1201],{"class":1109},[1088,8952,8953],{"class":1230},"field ",[1088,8955,8956],{"class":1101},"for",[1088,8958,8959],{"class":1230}," field ",[1088,8961,8962],{"class":1101},"in",[1088,8964,8965],{"class":1230}," required_fields",[1088,8967,1258],{"class":1109},[1088,8969,8970],{"class":1090,"line":2966},[1088,8971,1349],{"class":1105},[1088,8973,8974,8976,8978],{"class":1090,"line":2983},[1088,8975,1355],{"class":1193},[1088,8977,1358],{"class":1197},[1088,8979,1361],{"class":1109},[1088,8981,8982,8985,8987,8989,8992],{"class":1090,"line":2988},[1088,8983,8984],{"class":1105},"        verbose_name ",[1088,8986,1222],{"class":1109},[1088,8988,1558],{"class":1372},[1088,8990,8991],{"class":1376},"User Profile",[1088,8993,3495],{"class":1372},[1088,8995,8996,8998,9000,9002,9005],{"class":1090,"line":3001},[1088,8997,1367],{"class":1105},[1088,8999,1222],{"class":1109},[1088,9001,1558],{"class":1372},[1088,9003,9004],{"class":1376},"User Profiles",[1088,9006,3495],{"class":1372},[1088,9008,9009],{"class":1090,"line":3012},[1088,9010,1187],{"emptyLinePlaceholder":1186},[1088,9012,9013,9015,9018,9020,9022,9024,9026],{"class":1090,"line":3017},[1088,9014,1194],{"class":1193},[1088,9016,9017],{"class":1197}," Order",[1088,9019,1201],{"class":1109},[1088,9021,1205],{"class":1204},[1088,9023,1110],{"class":1109},[1088,9025,1210],{"class":1204},[1088,9027,1213],{"class":1109},[1088,9029,9030,9032,9034],{"class":1090,"line":3030},[1088,9031,1534],{"class":1434},[1088,9033,1537],{"class":1109},[1088,9035,1540],{"class":1109},[1088,9037,9038,9040,9042,9045,9047,9049,9051,9054,9056],{"class":1090,"line":3068},[1088,9039,1546],{"class":1109},[1088,9041,1394],{"class":1372},[1088,9043,9044],{"class":1376},"pending",[1088,9046,1394],{"class":1372},[1088,9048,1246],{"class":1109},[1088,9050,1558],{"class":1372},[1088,9052,9053],{"class":1376},"Pending",[1088,9055,1394],{"class":1372},[1088,9057,1566],{"class":1109},[1088,9059,9060,9062,9064,9067,9069,9071,9073,9076,9078],{"class":1090,"line":3073},[1088,9061,1546],{"class":1109},[1088,9063,1394],{"class":1372},[1088,9065,9066],{"class":1376},"processing",[1088,9068,1394],{"class":1372},[1088,9070,1246],{"class":1109},[1088,9072,1558],{"class":1372},[1088,9074,9075],{"class":1376},"Processing",[1088,9077,1394],{"class":1372},[1088,9079,1566],{"class":1109},[1088,9081,9082,9084,9086,9089,9091,9093,9095,9098,9100],{"class":1090,"line":3091},[1088,9083,1546],{"class":1109},[1088,9085,1394],{"class":1372},[1088,9087,9088],{"class":1376},"shipped",[1088,9090,1394],{"class":1372},[1088,9092,1246],{"class":1109},[1088,9094,1558],{"class":1372},[1088,9096,9097],{"class":1376},"Shipped",[1088,9099,1394],{"class":1372},[1088,9101,1566],{"class":1109},[1088,9103,9104,9106,9108,9111,9113,9115,9117,9120,9122],{"class":1090,"line":3137},[1088,9105,1546],{"class":1109},[1088,9107,1394],{"class":1372},[1088,9109,9110],{"class":1376},"delivered",[1088,9112,1394],{"class":1372},[1088,9114,1246],{"class":1109},[1088,9116,1558],{"class":1372},[1088,9118,9119],{"class":1376},"Delivered",[1088,9121,1394],{"class":1372},[1088,9123,1566],{"class":1109},[1088,9125,9126,9128,9130,9133,9135,9137,9139,9142,9144],{"class":1090,"line":3168},[1088,9127,1546],{"class":1109},[1088,9129,1394],{"class":1372},[1088,9131,9132],{"class":1376},"cancelled",[1088,9134,1394],{"class":1372},[1088,9136,1246],{"class":1109},[1088,9138,1558],{"class":1372},[1088,9140,9141],{"class":1376},"Cancelled",[1088,9143,1394],{"class":1372},[1088,9145,1566],{"class":1109},[1088,9147,9148,9150,9152,9155,9157,9159,9161,9164,9166],{"class":1090,"line":3233},[1088,9149,1546],{"class":1109},[1088,9151,1394],{"class":1372},[1088,9153,9154],{"class":1376},"refunded",[1088,9156,1394],{"class":1372},[1088,9158,1246],{"class":1109},[1088,9160,1558],{"class":1372},[1088,9162,9163],{"class":1376},"Refunded",[1088,9165,1394],{"class":1372},[1088,9167,1566],{"class":1109},[1088,9169,9170],{"class":1090,"line":3248},[1088,9171,1618],{"class":1109},[1088,9173,9174],{"class":1090,"line":3274},[1088,9175,1349],{"class":1105},[1088,9177,9178,9180,9182,9184,9186,9188,9190,9192,9194,9196,9198,9200,9202,9204,9206,9208,9210,9212,9215,9217],{"class":1090,"line":3297},[1088,9179,5456],{"class":1105},[1088,9181,1222],{"class":1109},[1088,9183,1225],{"class":1105},[1088,9185,1110],{"class":1109},[1088,9187,1694],{"class":1230},[1088,9189,1201],{"class":1109},[1088,9191,1699],{"class":1230},[1088,9193,1246],{"class":1109},[1088,9195,1704],{"class":1236},[1088,9197,1222],{"class":1109},[1088,9199,1205],{"class":1230},[1088,9201,1110],{"class":1109},[1088,9203,1714],{"class":1713},[1088,9205,1246],{"class":1109},[1088,9207,1719],{"class":1236},[1088,9209,1222],{"class":1109},[1088,9211,1394],{"class":1372},[1088,9213,9214],{"class":1376},"orders",[1088,9216,1394],{"class":1372},[1088,9218,1258],{"class":1109},[1088,9220,9221,9224,9226,9228,9230,9232,9234,9236,9238,9240,9242,9244,9246,9248,9250,9252,9254,9256],{"class":1090,"line":3320},[1088,9222,9223],{"class":1105},"    order_number ",[1088,9225,1222],{"class":1109},[1088,9227,1225],{"class":1105},[1088,9229,1110],{"class":1109},[1088,9231,1231],{"class":1230},[1088,9233,1201],{"class":1109},[1088,9235,1237],{"class":1236},[1088,9237,1222],{"class":1109},[1088,9239,4287],{"class":1242},[1088,9241,1246],{"class":1109},[1088,9243,1249],{"class":1236},[1088,9245,1222],{"class":1109},[1088,9247,1255],{"class":1254},[1088,9249,1246],{"class":1109},[1088,9251,3700],{"class":1236},[1088,9253,1222],{"class":1109},[1088,9255,3269],{"class":1254},[1088,9257,1258],{"class":1109},[1088,9259,9260,9262,9264,9266,9268,9270,9272,9274,9276,9278,9280,9282,9284,9286,9288,9290,9292,9294,9296,9298],{"class":1090,"line":3325},[1088,9261,1838],{"class":1105},[1088,9263,1222],{"class":1109},[1088,9265,1225],{"class":1105},[1088,9267,1110],{"class":1109},[1088,9269,1231],{"class":1230},[1088,9271,1201],{"class":1109},[1088,9273,1237],{"class":1236},[1088,9275,1222],{"class":1109},[1088,9277,4287],{"class":1242},[1088,9279,1246],{"class":1109},[1088,9281,1860],{"class":1236},[1088,9283,1222],{"class":1109},[1088,9285,1866],{"class":1865},[1088,9287,1246],{"class":1109},[1088,9289,1871],{"class":1236},[1088,9291,1222],{"class":1109},[1088,9293,1394],{"class":1372},[1088,9295,9044],{"class":1376},[1088,9297,1394],{"class":1372},[1088,9299,1258],{"class":1109},[1088,9301,9302],{"class":1090,"line":3334},[1088,9303,1349],{"class":1105},[1088,9305,9306],{"class":1090,"line":3352},[1088,9307,9308],{"class":1094},"    # Pricing\n",[1088,9310,9311,9314,9316,9318,9320,9322,9324,9326,9328,9330,9332,9334,9336,9338],{"class":1090,"line":3361},[1088,9312,9313],{"class":1105},"    subtotal ",[1088,9315,1222],{"class":1109},[1088,9317,1225],{"class":1105},[1088,9319,1110],{"class":1109},[1088,9321,3836],{"class":1230},[1088,9323,1201],{"class":1109},[1088,9325,3841],{"class":1236},[1088,9327,1222],{"class":1109},[1088,9329,1855],{"class":1242},[1088,9331,1246],{"class":1109},[1088,9333,3850],{"class":1236},[1088,9335,1222],{"class":1109},[1088,9337,3855],{"class":1242},[1088,9339,1258],{"class":1109},[1088,9341,9342,9345,9347,9349,9351,9353,9355,9357,9359,9361,9363,9365,9367,9369,9371,9373,9375,9377],{"class":1090,"line":3394},[1088,9343,9344],{"class":1105},"    tax_amount ",[1088,9346,1222],{"class":1109},[1088,9348,1225],{"class":1105},[1088,9350,1110],{"class":1109},[1088,9352,3836],{"class":1230},[1088,9354,1201],{"class":1109},[1088,9356,3841],{"class":1236},[1088,9358,1222],{"class":1109},[1088,9360,1855],{"class":1242},[1088,9362,1246],{"class":1109},[1088,9364,3850],{"class":1236},[1088,9366,1222],{"class":1109},[1088,9368,3855],{"class":1242},[1088,9370,1246],{"class":1109},[1088,9372,1871],{"class":1236},[1088,9374,1222],{"class":1109},[1088,9376,2167],{"class":1242},[1088,9378,1258],{"class":1109},[1088,9380,9381,9384,9386,9388,9390,9392,9394,9396,9398,9400,9402,9404,9406,9408,9410,9412,9414,9416],{"class":1090,"line":3425},[1088,9382,9383],{"class":1105},"    shipping_cost ",[1088,9385,1222],{"class":1109},[1088,9387,1225],{"class":1105},[1088,9389,1110],{"class":1109},[1088,9391,3836],{"class":1230},[1088,9393,1201],{"class":1109},[1088,9395,3841],{"class":1236},[1088,9397,1222],{"class":1109},[1088,9399,1855],{"class":1242},[1088,9401,1246],{"class":1109},[1088,9403,3850],{"class":1236},[1088,9405,1222],{"class":1109},[1088,9407,3855],{"class":1242},[1088,9409,1246],{"class":1109},[1088,9411,1871],{"class":1236},[1088,9413,1222],{"class":1109},[1088,9415,2167],{"class":1242},[1088,9417,1258],{"class":1109},[1088,9419,9420,9423,9425,9427,9429,9431,9433,9435,9437,9439,9441,9443,9445,9447,9449,9451,9453,9455],{"class":1090,"line":3430},[1088,9421,9422],{"class":1105},"    discount_amount ",[1088,9424,1222],{"class":1109},[1088,9426,1225],{"class":1105},[1088,9428,1110],{"class":1109},[1088,9430,3836],{"class":1230},[1088,9432,1201],{"class":1109},[1088,9434,3841],{"class":1236},[1088,9436,1222],{"class":1109},[1088,9438,1855],{"class":1242},[1088,9440,1246],{"class":1109},[1088,9442,3850],{"class":1236},[1088,9444,1222],{"class":1109},[1088,9446,3855],{"class":1242},[1088,9448,1246],{"class":1109},[1088,9450,1871],{"class":1236},[1088,9452,1222],{"class":1109},[1088,9454,2167],{"class":1242},[1088,9456,1258],{"class":1109},[1088,9458,9459],{"class":1090,"line":3435},[1088,9460,1349],{"class":1105},[1088,9462,9463],{"class":1090,"line":3448},[1088,9464,9465],{"class":1094},"    # Addresses\n",[1088,9467,9468,9471,9473,9475,9477,9479],{"class":1090,"line":3498},[1088,9469,9470],{"class":1105},"    billing_address ",[1088,9472,1222],{"class":1109},[1088,9474,1225],{"class":1105},[1088,9476,1110],{"class":1109},[1088,9478,1306],{"class":1230},[1088,9480,1799],{"class":1109},[1088,9482,9483,9486,9488,9490,9492,9494],{"class":1090,"line":3503},[1088,9484,9485],{"class":1105},"    shipping_address ",[1088,9487,1222],{"class":1109},[1088,9489,1225],{"class":1105},[1088,9491,1110],{"class":1109},[1088,9493,1306],{"class":1230},[1088,9495,1799],{"class":1109},[1088,9497,9498],{"class":1090,"line":3510},[1088,9499,1349],{"class":1105},[1088,9501,9502],{"class":1090,"line":3524},[1088,9503,1973],{"class":1094},[1088,9505,9506,9508,9510,9512,9514,9516,9518,9520,9522,9524],{"class":1090,"line":5522},[1088,9507,1323],{"class":1105},[1088,9509,1222],{"class":1109},[1088,9511,1225],{"class":1105},[1088,9513,1110],{"class":1109},[1088,9515,1332],{"class":1230},[1088,9517,1201],{"class":1109},[1088,9519,1337],{"class":1236},[1088,9521,1222],{"class":1109},[1088,9523,1255],{"class":1254},[1088,9525,1258],{"class":1109},[1088,9527,9528,9530,9532,9534,9536,9538,9540,9542,9544,9546],{"class":1090,"line":5527},[1088,9529,2002],{"class":1105},[1088,9531,1222],{"class":1109},[1088,9533,1225],{"class":1105},[1088,9535,1110],{"class":1109},[1088,9537,1332],{"class":1230},[1088,9539,1201],{"class":1109},[1088,9541,2015],{"class":1236},[1088,9543,1222],{"class":1109},[1088,9545,1255],{"class":1254},[1088,9547,1258],{"class":1109},[1088,9549,9550,9553,9555,9557,9559,9561,9563,9565,9567,9569,9571,9573,9575,9577],{"class":1090,"line":5550},[1088,9551,9552],{"class":1105},"    shipped_at ",[1088,9554,1222],{"class":1109},[1088,9556,1225],{"class":1105},[1088,9558,1110],{"class":1109},[1088,9560,1332],{"class":1230},[1088,9562,1201],{"class":1109},[1088,9564,2040],{"class":1236},[1088,9566,1222],{"class":1109},[1088,9568,1255],{"class":1254},[1088,9570,1246],{"class":1109},[1088,9572,1776],{"class":1236},[1088,9574,1222],{"class":1109},[1088,9576,1255],{"class":1254},[1088,9578,1258],{"class":1109},[1088,9580,9581,9584,9586,9588,9590,9592,9594,9596,9598,9600,9602,9604,9606,9608],{"class":1090,"line":5565},[1088,9582,9583],{"class":1105},"    delivered_at ",[1088,9585,1222],{"class":1109},[1088,9587,1225],{"class":1105},[1088,9589,1110],{"class":1109},[1088,9591,1332],{"class":1230},[1088,9593,1201],{"class":1109},[1088,9595,2040],{"class":1236},[1088,9597,1222],{"class":1109},[1088,9599,1255],{"class":1254},[1088,9601,1246],{"class":1109},[1088,9603,1776],{"class":1236},[1088,9605,1222],{"class":1109},[1088,9607,1255],{"class":1254},[1088,9609,1258],{"class":1109},[1088,9611,9612],{"class":1090,"line":5589},[1088,9613,1349],{"class":1105},[1088,9615,9616,9618,9620],{"class":1090,"line":5613},[1088,9617,1355],{"class":1193},[1088,9619,1358],{"class":1197},[1088,9621,1361],{"class":1109},[1088,9623,9624,9626,9628,9630,9632,9634,9636],{"class":1090,"line":5636},[1088,9625,1386],{"class":1105},[1088,9627,1222],{"class":1109},[1088,9629,1391],{"class":1109},[1088,9631,1394],{"class":1372},[1088,9633,2221],{"class":1376},[1088,9635,1394],{"class":1372},[1088,9637,1402],{"class":1109},[1088,9639,9640],{"class":1090,"line":5641},[1088,9641,1349],{"class":1105},[1088,9643,9644,9646,9648,9650,9652],{"class":1090,"line":5650},[1088,9645,1413],{"class":1193},[1088,9647,1417],{"class":1416},[1088,9649,1201],{"class":1109},[1088,9651,1423],{"class":1422},[1088,9653,1213],{"class":1109},[1088,9655,9656,9658,9660,9663,9665,9667,9669,9672,9674],{"class":1090,"line":5676},[1088,9657,1431],{"class":1101},[1088,9659,3453],{"class":1193},[1088,9661,9662],{"class":1376},"'Order ",[1088,9664,3460],{"class":3459},[1088,9666,1423],{"class":1434},[1088,9668,1110],{"class":1109},[1088,9670,9671],{"class":1440},"order_number",[1088,9673,3474],{"class":3459},[1088,9675,3495],{"class":1376},[1088,9677,9678],{"class":1090,"line":5693},[1088,9679,1349],{"class":1105},[1088,9681,9682,9684,9686,9688,9690,9692,9694,9696,9698,9700,9702],{"class":1090,"line":5698},[1088,9683,1413],{"class":1193},[1088,9685,2442],{"class":1454},[1088,9687,1201],{"class":1109},[1088,9689,1423],{"class":1422},[1088,9691,1246],{"class":1109},[1088,9693,2452],{"class":2451},[1088,9695,2456],{"class":2455},[1088,9697,1246],{"class":1109},[1088,9699,2461],{"class":2451},[1088,9701,2464],{"class":2455},[1088,9703,1213],{"class":1109},[1088,9705,9706,9708,9710,9712,9714,9716],{"class":1090,"line":5711},[1088,9707,2478],{"class":1101},[1088,9709,2499],{"class":2451},[1088,9711,1435],{"class":1434},[1088,9713,1110],{"class":1109},[1088,9715,9671],{"class":1440},[1088,9717,1361],{"class":1109},[1088,9719,9721,9723,9725,9727,9729,9731,9733,9736],{"class":1090,"line":9720},136,[1088,9722,2513],{"class":1434},[1088,9724,1110],{"class":1109},[1088,9726,9671],{"class":1440},[1088,9728,1537],{"class":1109},[1088,9730,1435],{"class":1434},[1088,9732,1110],{"class":1109},[1088,9734,9735],{"class":1230},"generate_order_number",[1088,9737,1799],{"class":1109},[1088,9739,9741,9743,9745,9747,9749,9751,9753,9755,9757,9759],{"class":1090,"line":9740},137,[1088,9742,2647],{"class":2646},[1088,9744,2650],{"class":1109},[1088,9746,2653],{"class":1230},[1088,9748,1201],{"class":1109},[1088,9750,2658],{"class":2451},[1088,9752,2456],{"class":1230},[1088,9754,1246],{"class":1109},[1088,9756,2461],{"class":2451},[1088,9758,2464],{"class":1230},[1088,9760,1258],{"class":1109},[1088,9762,9764],{"class":1090,"line":9763},138,[1088,9765,1349],{"class":1105},[1088,9767,9769,9771,9774,9776,9778],{"class":1090,"line":9768},139,[1088,9770,1413],{"class":1193},[1088,9772,9773],{"class":1454}," generate_order_number",[1088,9775,1201],{"class":1109},[1088,9777,1423],{"class":1422},[1088,9779,1213],{"class":1109},[1088,9781,9783,9785,9788],{"class":1090,"line":9782},140,[1088,9784,2760],{"class":2759},[1088,9786,9787],{"class":2763},"Generate unique order number",[1088,9789,2767],{"class":2759},[1088,9791,9793,9796],{"class":1090,"line":9792},141,[1088,9794,9795],{"class":1101},"        import",[1088,9797,9798],{"class":1105}," random\n",[1088,9800,9802,9804],{"class":1090,"line":9801},142,[1088,9803,9795],{"class":1101},[1088,9805,9806],{"class":1105}," string\n",[1088,9808,9810],{"class":1090,"line":9809},143,[1088,9811,2535],{"class":1105},[1088,9813,9815,9818,9821],{"class":1090,"line":9814},144,[1088,9816,9817],{"class":1101},"        while",[1088,9819,9820],{"class":1254}," True",[1088,9822,1361],{"class":1109},[1088,9824,9826,9829,9831,9834,9836,9839,9841,9844,9846,9849,9851,9854,9856,9859,9861,9864,9866,9869,9871,9874,9876,9878],{"class":1090,"line":9825},145,[1088,9827,9828],{"class":1105},"            number ",[1088,9830,1222],{"class":1109},[1088,9832,9833],{"class":1372}," ''",[1088,9835,1110],{"class":1109},[1088,9837,9838],{"class":1230},"join",[1088,9840,1201],{"class":1109},[1088,9842,9843],{"class":1230},"random",[1088,9845,1110],{"class":1109},[1088,9847,9848],{"class":1230},"choices",[1088,9850,1201],{"class":1109},[1088,9852,9853],{"class":1230},"string",[1088,9855,1110],{"class":1109},[1088,9857,9858],{"class":1440},"ascii_uppercase",[1088,9860,2595],{"class":2451},[1088,9862,9863],{"class":1230}," string",[1088,9865,1110],{"class":1109},[1088,9867,9868],{"class":1440},"digits",[1088,9870,1246],{"class":1109},[1088,9872,9873],{"class":1236}," k",[1088,9875,1222],{"class":1109},[1088,9877,1855],{"class":1242},[1088,9879,9880],{"class":1109},"))\n",[1088,9882,9884,9887,9889,9891,9893,9896,9898,9901,9903,9905,9907,9910,9913,9916],{"class":1090,"line":9883},146,[1088,9885,9886],{"class":1101},"            if",[1088,9888,2499],{"class":2451},[1088,9890,9017],{"class":1105},[1088,9892,1110],{"class":1109},[1088,9894,9895],{"class":1440},"objects",[1088,9897,1110],{"class":1109},[1088,9899,9900],{"class":1230},"filter",[1088,9902,1201],{"class":1109},[1088,9904,9671],{"class":1236},[1088,9906,1222],{"class":1109},[1088,9908,9909],{"class":1230},"number",[1088,9911,9912],{"class":1109},").",[1088,9914,9915],{"class":1230},"exists",[1088,9917,8144],{"class":1109},[1088,9919,9921,9924],{"class":1090,"line":9920},147,[1088,9922,9923],{"class":1101},"                return",[1088,9925,9926],{"class":1105}," number\n",[1088,9928,9930],{"class":1090,"line":9929},148,[1088,9931,1349],{"class":1105},[1088,9933,9935,9937],{"class":1090,"line":9934},149,[1088,9936,2679],{"class":1109},[1088,9938,2682],{"class":2646},[1088,9940,9942,9944,9947,9949,9951],{"class":1090,"line":9941},150,[1088,9943,1413],{"class":1193},[1088,9945,9946],{"class":1454}," total_amount",[1088,9948,1201],{"class":1109},[1088,9950,1423],{"class":1422},[1088,9952,1213],{"class":1109},[1088,9954,9956,9958,9961],{"class":1090,"line":9955},151,[1088,9957,2760],{"class":2759},[1088,9959,9960],{"class":2763},"Calculate total order amount",[1088,9962,2767],{"class":2759},[1088,9964,9966,9968,9970,9972,9975,9977,9979,9981,9984,9986,9988,9990,9993,9995,9997,9999],{"class":1090,"line":9965},152,[1088,9967,1431],{"class":1101},[1088,9969,1435],{"class":1434},[1088,9971,1110],{"class":1109},[1088,9973,9974],{"class":1440},"subtotal",[1088,9976,2595],{"class":2451},[1088,9978,1435],{"class":1434},[1088,9980,1110],{"class":1109},[1088,9982,9983],{"class":1440},"tax_amount",[1088,9985,2595],{"class":2451},[1088,9987,1435],{"class":1434},[1088,9989,1110],{"class":1109},[1088,9991,9992],{"class":1440},"shipping_cost",[1088,9994,5075],{"class":2451},[1088,9996,1435],{"class":1434},[1088,9998,1110],{"class":1109},[1088,10000,10001],{"class":1440},"discount_amount\n",[1088,10003,10005],{"class":1090,"line":10004},153,[1088,10006,1349],{"class":1105},[1088,10008,10010,10012],{"class":1090,"line":10009},154,[1088,10011,2679],{"class":1109},[1088,10013,2682],{"class":2646},[1088,10015,10017,10019,10022,10024,10026],{"class":1090,"line":10016},155,[1088,10018,1413],{"class":1193},[1088,10020,10021],{"class":1454}," is_paid",[1088,10023,1201],{"class":1109},[1088,10025,1423],{"class":1422},[1088,10027,1213],{"class":1109},[1088,10029,10031,10033,10036],{"class":1090,"line":10030},156,[1088,10032,2760],{"class":2759},[1088,10034,10035],{"class":2763},"Check if order is paid",[1088,10037,2767],{"class":2759},[1088,10039,10041,10043,10046,10048,10050,10052,10054,10057,10059,10061,10063,10065,10067,10069,10071],{"class":1090,"line":10040},157,[1088,10042,1431],{"class":1101},[1088,10044,10045],{"class":1416}," hasattr",[1088,10047,1201],{"class":1109},[1088,10049,1423],{"class":1434},[1088,10051,1246],{"class":1109},[1088,10053,1558],{"class":1372},[1088,10055,10056],{"class":1376},"payment",[1088,10058,1394],{"class":1372},[1088,10060,2619],{"class":1109},[1088,10062,2496],{"class":2451},[1088,10064,1435],{"class":1434},[1088,10066,1110],{"class":1109},[1088,10068,10056],{"class":1440},[1088,10070,1110],{"class":1109},[1088,10072,10073],{"class":1440},"is_successful\n",[1088,10075,10077],{"class":1090,"line":10076},158,[1088,10078,1349],{"class":1105},[1088,10080,10082,10084],{"class":1090,"line":10081},159,[1088,10083,2679],{"class":1109},[1088,10085,2682],{"class":2646},[1088,10087,10089,10091,10094,10096,10098],{"class":1090,"line":10088},160,[1088,10090,1413],{"class":1193},[1088,10092,10093],{"class":1454}," can_be_cancelled",[1088,10095,1201],{"class":1109},[1088,10097,1423],{"class":1422},[1088,10099,1213],{"class":1109},[1088,10101,10103,10105,10108],{"class":1090,"line":10102},161,[1088,10104,2760],{"class":2759},[1088,10106,10107],{"class":2763},"Check if order can be cancelled",[1088,10109,2767],{"class":2759},[1088,10111,10113,10115,10117,10119,10121,10124,10126,10128,10130,10132,10134,10136,10138,10140],{"class":1090,"line":10112},162,[1088,10114,1431],{"class":1101},[1088,10116,1435],{"class":1434},[1088,10118,1110],{"class":1109},[1088,10120,2259],{"class":1440},[1088,10122,10123],{"class":2451}," in",[1088,10125,1391],{"class":1109},[1088,10127,1394],{"class":1372},[1088,10129,9044],{"class":1376},[1088,10131,1394],{"class":1372},[1088,10133,1246],{"class":1109},[1088,10135,1558],{"class":1372},[1088,10137,9066],{"class":1376},[1088,10139,1394],{"class":1372},[1088,10141,1402],{"class":1109},[1088,10143,10145],{"class":1090,"line":10144},163,[1088,10146,1349],{"class":1105},[1088,10148,10150,10152,10155,10157,10159],{"class":1090,"line":10149},164,[1088,10151,1413],{"class":1193},[1088,10153,10154],{"class":1454}," get_status_display_class",[1088,10156,1201],{"class":1109},[1088,10158,1423],{"class":1422},[1088,10160,1213],{"class":1109},[1088,10162,10164,10166,10169],{"class":1090,"line":10163},165,[1088,10165,2760],{"class":2759},[1088,10167,10168],{"class":2763},"Get CSS class for status display",[1088,10170,2767],{"class":2759},[1088,10172,10174,10177,10179],{"class":1090,"line":10173},166,[1088,10175,10176],{"class":1105},"        status_classes ",[1088,10178,1222],{"class":1109},[1088,10180,10181],{"class":1109}," {\n",[1088,10183,10185,10188,10190,10192,10194,10196,10199,10201],{"class":1090,"line":10184},167,[1088,10186,10187],{"class":1372},"            '",[1088,10189,9044],{"class":1376},[1088,10191,1394],{"class":1372},[1088,10193,1496],{"class":1109},[1088,10195,1558],{"class":1372},[1088,10197,10198],{"class":1376},"warning",[1088,10200,1394],{"class":1372},[1088,10202,4487],{"class":1109},[1088,10204,10206,10208,10210,10212,10214,10216,10219,10221],{"class":1090,"line":10205},168,[1088,10207,10187],{"class":1372},[1088,10209,9066],{"class":1376},[1088,10211,1394],{"class":1372},[1088,10213,1496],{"class":1109},[1088,10215,1558],{"class":1372},[1088,10217,10218],{"class":1376},"info",[1088,10220,1394],{"class":1372},[1088,10222,4487],{"class":1109},[1088,10224,10226,10228,10230,10232,10234,10236,10239,10241],{"class":1090,"line":10225},169,[1088,10227,10187],{"class":1372},[1088,10229,9088],{"class":1376},[1088,10231,1394],{"class":1372},[1088,10233,1496],{"class":1109},[1088,10235,1558],{"class":1372},[1088,10237,10238],{"class":1376},"primary",[1088,10240,1394],{"class":1372},[1088,10242,4487],{"class":1109},[1088,10244,10246,10248,10250,10252,10254,10256,10259,10261],{"class":1090,"line":10245},170,[1088,10247,10187],{"class":1372},[1088,10249,9110],{"class":1376},[1088,10251,1394],{"class":1372},[1088,10253,1496],{"class":1109},[1088,10255,1558],{"class":1372},[1088,10257,10258],{"class":1376},"success",[1088,10260,1394],{"class":1372},[1088,10262,4487],{"class":1109},[1088,10264,10266,10268,10270,10272,10274,10276,10279,10281],{"class":1090,"line":10265},171,[1088,10267,10187],{"class":1372},[1088,10269,9132],{"class":1376},[1088,10271,1394],{"class":1372},[1088,10273,1496],{"class":1109},[1088,10275,1558],{"class":1372},[1088,10277,10278],{"class":1376},"danger",[1088,10280,1394],{"class":1372},[1088,10282,4487],{"class":1109},[1088,10284,10286,10288,10290,10292,10294,10296,10299,10301],{"class":1090,"line":10285},172,[1088,10287,10187],{"class":1372},[1088,10289,9154],{"class":1376},[1088,10291,1394],{"class":1372},[1088,10293,1496],{"class":1109},[1088,10295,1558],{"class":1372},[1088,10297,10298],{"class":1376},"secondary",[1088,10300,1394],{"class":1372},[1088,10302,4487],{"class":1109},[1088,10304,10306],{"class":1090,"line":10305},173,[1088,10307,10308],{"class":1109},"        }\n",[1088,10310,10312,10314,10317,10319,10322,10324,10326,10328,10330,10332,10334,10336,10338],{"class":1090,"line":10311},174,[1088,10313,1431],{"class":1101},[1088,10315,10316],{"class":1105}," status_classes",[1088,10318,1110],{"class":1109},[1088,10320,10321],{"class":1230},"get",[1088,10323,1201],{"class":1109},[1088,10325,1423],{"class":1434},[1088,10327,1110],{"class":1109},[1088,10329,2259],{"class":1440},[1088,10331,1246],{"class":1109},[1088,10333,1558],{"class":1372},[1088,10335,10298],{"class":1376},[1088,10337,1394],{"class":1372},[1088,10339,1258],{"class":1109},[1088,10341,10343],{"class":1090,"line":10342},175,[1088,10344,1349],{"class":1105},[1088,10346,10348,10350,10353,10355,10357],{"class":1090,"line":10347},176,[1088,10349,1413],{"class":1193},[1088,10351,10352],{"class":1454}," mark_as_shipped",[1088,10354,1201],{"class":1109},[1088,10356,1423],{"class":1422},[1088,10358,1213],{"class":1109},[1088,10360,10362,10364,10367],{"class":1090,"line":10361},177,[1088,10363,2760],{"class":2759},[1088,10365,10366],{"class":2763},"Mark order as shipped",[1088,10368,2767],{"class":2759},[1088,10370,10372,10374,10376,10378,10380,10382,10384,10386,10388],{"class":1090,"line":10371},178,[1088,10373,2478],{"class":1101},[1088,10375,1435],{"class":1434},[1088,10377,1110],{"class":1109},[1088,10379,2259],{"class":1440},[1088,10381,2487],{"class":2451},[1088,10383,1558],{"class":1372},[1088,10385,9066],{"class":1376},[1088,10387,1394],{"class":1372},[1088,10389,1361],{"class":1109},[1088,10391,10393,10395,10397,10399,10401,10403,10405],{"class":1090,"line":10392},179,[1088,10394,2513],{"class":1434},[1088,10396,1110],{"class":1109},[1088,10398,2259],{"class":1440},[1088,10400,1537],{"class":1109},[1088,10402,1558],{"class":1372},[1088,10404,9088],{"class":1376},[1088,10406,3495],{"class":1372},[1088,10408,10410,10412,10414,10417,10419,10421,10423,10425],{"class":1090,"line":10409},180,[1088,10411,2513],{"class":1434},[1088,10413,1110],{"class":1109},[1088,10415,10416],{"class":1440},"shipped_at",[1088,10418,1537],{"class":1109},[1088,10420,2522],{"class":1105},[1088,10422,1110],{"class":1109},[1088,10424,2527],{"class":1230},[1088,10426,1799],{"class":1109},[1088,10428,10430,10432,10434,10436],{"class":1090,"line":10429},181,[1088,10431,2513],{"class":1434},[1088,10433,1110],{"class":1109},[1088,10435,2653],{"class":1230},[1088,10437,1799],{"class":1109},[1088,10439,10441],{"class":1090,"line":10440},182,[1088,10442,1349],{"class":1105},[1088,10444,10446,10448,10451,10453,10455],{"class":1090,"line":10445},183,[1088,10447,1413],{"class":1193},[1088,10449,10450],{"class":1454}," mark_as_delivered",[1088,10452,1201],{"class":1109},[1088,10454,1423],{"class":1422},[1088,10456,1213],{"class":1109},[1088,10458,10460,10462,10465],{"class":1090,"line":10459},184,[1088,10461,2760],{"class":2759},[1088,10463,10464],{"class":2763},"Mark order as delivered",[1088,10466,2767],{"class":2759},[1088,10468,10470,10472,10474,10476,10478,10480,10482,10484,10486],{"class":1090,"line":10469},185,[1088,10471,2478],{"class":1101},[1088,10473,1435],{"class":1434},[1088,10475,1110],{"class":1109},[1088,10477,2259],{"class":1440},[1088,10479,2487],{"class":2451},[1088,10481,1558],{"class":1372},[1088,10483,9088],{"class":1376},[1088,10485,1394],{"class":1372},[1088,10487,1361],{"class":1109},[1088,10489,10491,10493,10495,10497,10499,10501,10503],{"class":1090,"line":10490},186,[1088,10492,2513],{"class":1434},[1088,10494,1110],{"class":1109},[1088,10496,2259],{"class":1440},[1088,10498,1537],{"class":1109},[1088,10500,1558],{"class":1372},[1088,10502,9110],{"class":1376},[1088,10504,3495],{"class":1372},[1088,10506,10508,10510,10512,10515,10517,10519,10521,10523],{"class":1090,"line":10507},187,[1088,10509,2513],{"class":1434},[1088,10511,1110],{"class":1109},[1088,10513,10514],{"class":1440},"delivered_at",[1088,10516,1537],{"class":1109},[1088,10518,2522],{"class":1105},[1088,10520,1110],{"class":1109},[1088,10522,2527],{"class":1230},[1088,10524,1799],{"class":1109},[1088,10526,10528,10530,10532,10534],{"class":1090,"line":10527},188,[1088,10529,2513],{"class":1434},[1088,10531,1110],{"class":1109},[1088,10533,2653],{"class":1230},[1088,10535,1799],{"class":1109},[1026,10537,10538],{},"Django models provide the foundation for your application's data layer. Understanding field types, relationships, and custom model methods enables you to create robust, maintainable data structures that accurately represent your business logic while leveraging Django's powerful ORM capabilities.",[10540,10541,10542],"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 .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 .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 .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 .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 .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 .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s6DHA, html code.shiki .s6DHA{--shiki-light:#6182B8;--shiki-default:#A65E2B;--shiki-dark:#C99076}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 pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}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 .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}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 .sRJPX, html code.shiki .sRJPX{--shiki-light:#91B859;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sETVe, html code.shiki .sETVe{--shiki-light:#39ADB5;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sGuSu, html code.shiki .sGuSu{--shiki-light:#39ADB5;--shiki-default:#2F798A;--shiki-dark:#4C9A91}",{"title":1083,"searchDepth":1091,"depth":1098,"links":10544},[10545,10548,10551,10554,10558],{"id":1032,"depth":1098,"text":1033,"children":10546},[10547],{"id":1040,"depth":1122,"text":1041},{"id":1071,"depth":1098,"text":1072,"children":10549},[10550],{"id":1075,"depth":1122,"text":1076},{"id":3544,"depth":1098,"text":3545,"children":10552},[10553],{"id":3548,"depth":1122,"text":3549},{"id":5746,"depth":1098,"text":5747,"children":10555},[10556,10557],{"id":5750,"depth":1122,"text":5751},{"id":6495,"depth":1122,"text":6496},{"id":7546,"depth":1098,"text":7547,"children":10559},[10560],{"id":7550,"depth":1122,"text":7551},"md",null,{},{"title":254,"description":1028},"1OIHmE-CdLPIKgig03HVAO4oil91FEu1pfDU0TG4GYU",[10567,10569],{"title":250,"path":251,"stem":252,"description":10568,"children":-1},"Form security is critical for protecting applications from various attacks and ensuring data integrity. This chapter covers comprehensive security measures, from CSRF protection to input validation and advanced security patterns.",{"title":260,"path":261,"stem":262,"description":10570,"children":-1},"Django models are the single, definitive source of information about your data. They contain the essential fields and behaviors of the data you're storing. Each model maps to a single database table, and each attribute of the model represents a database field.",1772474916378]