#27267: Migrations: Need API to drop a foreign key constraint
--------------------------------+--------------------
Reporter: Melvyn Sopacua | Owner: nobody
Type: Uncategorized | Status: new
Component: Migrations | Version: 1.10
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------+--------------------
When Django creates a foreign key constraint it uses a randomly generated
string as part of the contraint name at the time it creates it. This has a
side-effect that the names of these constraints are different for each
database created. The better fix may then also be to get rid of this
random string.
When one changes the type of a field that has foreign key references to
it, then one cannot migrate the app. Attempts to use RunSQL fail, because
as said, each database will have a different contraint name. This is most
evident by just trying to create the test database with the following bit
in a migration:
{{{#!python
operations = [
migrations.RunSQL(
[
'ALTER TABLE dpe_dpecharacter DROP CONSTRAINT {}'.format(
FKEY_NAME
),
],
]
}}}
So if the path is chosen not to get rid of the random string, we need a
way to find out what the actual name of the foreign key constraint is,
preferably wrapped as migrations.DropForeignKey().
The real world case that triggered this, was that initial design used a
CharField as primary key, yet limitations in either or both
contrib.contenttypes or Mezzanine prevented this from working correctly
and an autogenerated primary key had to be used instead. Dropping the
primary key is no issue, since it's name is predictable and consistent
amonst different incarnations of the database.
--
Ticket URL: <https://code.djangoproject.com/ticket/27267>
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/057.f4bea139618b73d3a3b97338453fc9d8%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.