#36844: Update packaging tutorial and AppConfig docs to mandate setting
default_auto_field for reusable apps
-------------------------------------+-------------------------------------
Reporter: Jacob Walls | Type:
| Cleanup/optimization
Status: new | Component:
| Documentation
Version: dev | Severity: Normal
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
A reusable (third-party) app that:
- has models
- but does ''not'' set `AppConfig.default_auto_field`
is in a
[
https://github.com/django/django/pull/20319#discussion_r2631747194
"completely broken" situation], given that any user attempting to use
`DEFAULT_AUTO_FIELD` in their own settings will generate migrations for
the reusable app, which can conflict with later migrations shipped by that
app, or possibly get stored in the app's installation location:
> Third-party apps should set default_auto_field so that the migrations
the app includes match the models.
This discussion took place in a
[
https://github.com/django/django/pull/20319 PR that was not accepted]
proposing to advise on user workarounds. Instead, I think we should advise
app authors to do the right thing.
That would include:
- strengthening the wording in `AppConfig.default_auto_field` docs,
replacing "You can use this... for third party applications" to something
like "Third-party applications *must* set this ..."
- Fixing the tutorial to show this step under
[
https://docs.djangoproject.com/en/dev/intro/reusable-apps/#packaging-
your-app "Packaging your app"]. To my knowledge (I'm hoping someone will
confirm), when you follow the tutorial and arrive at this step modeling
how to make your app reusable, there is no `default_auto_field` attribute
on the `AppConfig` in apps.py.
This would be an approachable issue for a new contributor, as it involves
following the tutorial to verify completeness and accuracy.
--
Ticket URL: <
https://code.djangoproject.com/ticket/36844>
Django <
https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.