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