| | 130 | == Add migration hooks for Django and third-party apps == |
| | 131 | |
| | 132 | || Difficulty || Hard |
| | 133 | || Size || 350hr |
| | 134 | || Mentors || (need confirmation) |
| | 135 | || Key Skills || Django ORM, migrations |
| | 136 | |
| | 137 | Introduce an API for apps to respond to migration operations with additional operations. Adapt `django.contrib.contenttypes` and `django.contrib.auth` to use it, making content types and permissions available to subsequent data migrations. |
| | 138 | |
| | 139 | The design should account for reversing and squashing migrations, database routing, and apps being added to existing projects. The expected outcome is a tested and documented API usable by Django and third-party apps. |
| | 140 | |
| | 141 | References: |
| | 142 | * [https://code.djangoproject.com/ticket/29843#comment:9 Ticket #29843: Create permissions using migration operations] |
| | 143 | * [https://forum.djangoproject.com/t/can-the-migration-system-be-extended-by-third-party-apps/44009/4 Forum discussion: Extending the migration system] |
| | 144 | |
| | 145 | == Develop scalable pagination for large querysets == |
| | 146 | |
| | 147 | || Difficulty || Hard |
| | 148 | || Size || 350hr |
| | 149 | || Mentors || (need confirmation) |
| | 150 | || Key Skills || Django ORM, SQL, database performance |
| | 151 | |
| | 152 | Develop a third-party pagination package that avoids expensive counting and large offsets, with cursor-based pagination as a promising approach. The design should address ordering, navigation in both directions, and supported queryset limitations. |
| | 153 | |
| | 154 | The expected outcome is a published package with tests, documentation, and performance benchmarks, accompanied by a Django blog post inviting feedback to inform development and possible inclusion in Django. |
| | 155 | |
| | 156 | References: |
| | 157 | * [https://code.djangoproject.com/ticket/37220 Ticket #37220: Scalable pagination] |
| | 158 | * [https://code.djangoproject.com/ticket/26451 Ticket #26451: Historical pagination discussion] |
| | 159 | |
| | 160 | == Composite Foreign Keys == |
| | 161 | |
| | 162 | || Difficulty || Hard |
| | 163 | || Size || 350hr |
| | 164 | || Mentors || (need confirmation) |
| | 165 | || Key Skills || Python, Django ORM, SQL, database constraints, migrations |
| | 166 | |
| | 167 | Add support for foreign keys referencing composite primary keys, building on draft PR #18868. This includes database constraints, validation, and migrations. |
| | 168 | |
| | 169 | The design should address explicit field mappings, fields shared between relationships, and whether automatic field creation is feasible. It should also consider a standalone `ForeignKeyConstraint` and how composite relationships interact with virtual fields and the usual `<field>_id` attribute. |
| | 170 | |
| | 171 | The expected outcome is a tested and documented API supporting composite foreign keys across Django's supported database backends. |
| | 172 | |
| | 173 | References: |
| | 174 | * [https://code.djangoproject.com/ticket/35956 Ticket #35956: Add composite foreign keys] |
| | 175 | * [https://github.com/django/django/pull/18868 Draft PR #18868] |
| | 176 | |
| | 177 | == Add translation catalog checks and statistics to makemessages == |
| | 178 | |
| | 179 | || Difficulty || Medium |
| | 180 | || Size || 175hr |
| | 181 | || Mentors || (need confirmation) |
| | 182 | || Key Skills || gettext, Django management commands, internationalization |
| | 183 | |
| | 184 | Extend `makemessages` to check whether translation catalogs are up to date and report translation statistics without modifying `.po` files. |
| | 185 | |
| | 186 | The work includes defining command options and reliable exit codes for automated checks. Checks should distinguish outdated catalogs from incomplete translations and ignore differences caused solely by generated metadata. |
| | 187 | |
| | 188 | The expected outcome is tested and documented functionality suitable for local development and continuous integration. |
| | 189 | |
| | 190 | References: |
| | 191 | * [https://code.djangoproject.com/ticket/26803 Ticket #26803: Add a statistics option to makemessages] |
| | 192 | |
| | 193 | == Migrate Django's translation workflow to Weblate == |
| | 194 | |
| | 195 | || Difficulty || Medium |
| | 196 | || Size || 175hr |
| | 197 | || Mentors || (need confirmation) |
| | 198 | || Key Skills || Python, gettext, Git, translation platforms, technical writing |
| | 199 | |
| | 200 | Migrate Django and documentation translations from Transifex to Weblate, coordinating the transition with translation maintainers and available hosting capacity. |
| | 201 | |
| | 202 | Update `scripts/manage_translations.py` and the tooling in `django/django-docs-translations`. Validate that catalogs are preserved, translated documentation builds, and translation updates can be incorporated into releases. |
| | 203 | |
| | 204 | The expected outcome is a working Weblate workflow, tested integration tooling, and guidance for translators and maintainers. |
| | 205 | |
| | 206 | References: |
| | 207 | * [https://forum.djangoproject.com/t/improving-the-process-of-incorporating-translations-to-django/26140/19 Forum discussion and hosting arrangements] |
| | 208 | * [https://github.com/django/django-docs-translations Django documentation translations repository] |
| | 209 | * [https://github.com/django/django/blob/main/scripts/manage_translations.py Django translation management script] |
| | 210 | |
| | 211 | == Add interactive ORM examples to Django's documentation == |
| | 212 | |
| | 213 | || Difficulty || Medium |
| | 214 | || Size || 175hr |
| | 215 | || Mentors || (need confirmation) |
| | 216 | || Key Skills || Django ORM, Sphinx, JavaScript, technical writing |
| | 217 | |
| | 218 | Integrate DryORM into Django's documentation so readers can experiment with ORM examples and inspect their results without setting up a local project. |
| | 219 | |
| | 220 | The work would include agreeing on the integration approach, preparing runnable examples with models and sample data, and adding documentation tooling to maintain them. The design should account for Django versions, accessibility, and keeping the documentation usable without the external service. |
| | 221 | |
| | 222 | The expected outcome is a tested integration demonstrated on selected ORM documentation pages, with guidance for contributors adding further examples. |
| | 223 | |
| | 224 | References: |
| | 225 | * [https://github.com/django/new-features/issues/203 Proposal #203: Include DryORM tool in the documentation] |
| | 226 | * [https://dryorm.xterm.info/ DryORM] |
| | 227 | |
| | 228 | == Add built-in Cross-Origin Resource Sharing (CORS) support == |
| | 229 | |
| | 230 | || Difficulty || Medium |
| | 231 | || Size || 175hr |
| | 232 | || Mentors || (need confirmation) |
| | 233 | || Key Skills || Python, HTTP, Django middleware, async programming |
| | 234 | |
| | 235 | Bring the core functionality of `django-cors-headers` into Django, allowing projects to configure cross-origin access without an additional dependency. |
| | 236 | |
| | 237 | The work would include agreeing on requirements and configuration, implementing middleware for synchronous and asynchronous requests, and providing a migration guide for existing package users. The design should cover allowed origins, credentials, preflight requests, and interaction with existing middleware. |
| | 238 | |
| | 239 | The expected outcome is tested and documented CORS support, with configuration examples and guidance explaining its relationship to CSRF protection. |
| | 240 | |
| | 241 | References: |
| | 242 | * [https://github.com/django/new-features/issues/8 Proposal #8: Bring django-cors-headers features into Django] |
| | 243 | * [https://github.com/adamchainz/django-cors-headers django-cors-headers] |
| | 244 | |
| | 245 | == Implement DEP 15: Improved startproject interface == |
| | 246 | |
| | 247 | || Difficulty || Medium |
| | 248 | || Size || 175hr |
| | 249 | || Mentors || (need confirmation) |
| | 250 | || Key Skills || Python, Django management commands, project templates, technical writing |
| | 251 | |
| | 252 | Implement the improved `startproject` interface described in DEP 15, making it easier to start Django projects with simpler layouts while preserving backwards compatibility. |
| | 253 | |
| | 254 | The work would include updating command options and project templates, testing the generated projects, and documenting the supported layouts. Particular attention should be given to the experience of beginners and consistency with existing Django tooling. |
| | 255 | |
| | 256 | The expected outcome is a tested and documented implementation of DEP 15, with examples explaining how to create and develop projects using the new interface. |
| | 257 | |
| | 258 | References: |
| | 259 | * [https://github.com/django/deps/blob/main/accepted/0015-extended-startproject.rst DEP 15: Improved startproject interface] |
| | 260 | |