#33366: Migration autodetector doesn't handle placeholders in related_name for
ForeignKey.
-------------------------------------+-------------------------------------
Reporter: Andrew Chen Wang | Owner: Simon
| Charette
Type: Bug | Status: assigned
Component: Database layer | Version: 4.0
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Simon Charette):
* needs_better_patch: 1 => 0
Comment:
Removing the ''patch needs improvement'' flag as I believe the noop
`AlterField` for the un-interpolated `related_name` is expected and
documented in the Django 4.0 release notes (see #32676).
I think the conclusion in comment:6 is wrong as I managed to reproduce the
''swappable'' dependency issue without involving `related_name` and the
noop `AlterField` manifestation on Django 4.0 can be achieved without
involving ''swappable'' models.
If we want to address the noop `AlterField` migration being generated for
all usages of placeholders in `related_name` there's two way we can do
that.
1. Augment the documentation to mention under which circumstances such
`AlterField` operations can be created and mention that it is safe to
adjust history migrations to use the proper ''placeholder'' syntax to
prevent it from happeing (it's safe even if your library supports Django <
4.0 as well because the models were rendered and thus `related_name` were
evaluated at field binding time).
2. Adjust the auto-detector to consider `'app_model` and
`'%(app_label)s_%(class)s'` equals (in the context of a `app.Model` model)
to prevent changes from being detected. This will have the unfortunate
side effect to prevent changes of a field from harcoded to placeholders
based `related_name` to be detected by the framework which could be
considered a limitation of the previous approach model rendering based
approach.
I personally think that 1. is the way to go but I don't have a strong
feeling here.
--
Ticket URL: <https://code.djangoproject.com/ticket/33366#comment:11>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/074.94d73f81e6f12317de4c9fc53c575244%40djangoproject.com.