#23581: Migration shouldn't generate "DROP DEFAULT" SQL if no database changes
are
required
--------------------------------------+------------------------------------
Reporter: john_scott | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: Migrations | Version: 1.7
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------
Comment (by andrewgodwin):
Because of the way the new migrations system works, every attribute needs
to be present in an AlterField in order to make sure it's represented in
the historical state when it comes time to do a RunPython command. The
only way around that particular implementation detail would be to use
SeparateDatabaseAndState to say "the database changes are <empty list>,
the state changes are <alter field>", but that's pointless once we fix the
bug here where spurious default alteration is sent - once that's fixed an
AlterField with no schema changes won't do anything to the database
anyway.
If django-cms is using settings to define choices then, as Shai suggests,
django-cms can edit their migration so that the choices attribute points
to that settings variable rather than being copied from it and then the
autodetector won't detect any changes. You can't do anything as a user
other than encourage them to fix their migrations. You could also fork
their migration tree and use MIGRATION_MODULES to point it to something
you control for now, but that's not a great solution.
This is just one of those pain points as people (and third party apps)
adapt to the new migrations - sorry about this, but there's no quick short
term fix, third parties just have to get used to crafting migrations along
with models. If you set any field attribute to something outside the scope
of model control (like a setting) you just have to point it to the same
thing in the resultant migration that makes that field and the
autodetector will be happy.
Subclassing fields and removing choices is a possible but very extreme
solution; that would only make sense for a field whose choices change
literally every time the application starts (e.g. they're randomised or
something), which is pretty rare from what I've seen (people who are
pulling choices from querysets at boot, for example, are probably doing it
wrong)
--
Ticket URL: <https://code.djangoproject.com/ticket/23581#comment:12>
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 post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/068.a14f443f76a4719e03e3ffd000af37e6%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.