#26777: Cannot add foreign key constraint when migrating manytomany field
----------------------------+--------------------------------------
Reporter: Uninen | Owner: nobody
Type: Bug | Status: closed
Component: Migrations | Version: 1.9
Severity: Normal | Resolution: needsinfo
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
----------------------------+--------------------------------------
Changes (by charettes):
* status: new => closed
* needs_better_patch: => 0
* needs_tests: => 0
* type: Uncategorized => Bug
* needs_docs: => 0
* resolution: => needsinfo
Old description:
> I have a model that looks like
>
> {{{
> class LiveEvent(models.Model):
> id = models.UUIDField(primary_key=True, default=uuid.uuid4,
> editable=False)
>
> ...
>
> attendees = models.ManyToManyField(User, blank=True,
> related_name="events_attended")
>
> ...
>
> notify_subscriptions = models.ManyToManyField(User, blank=True,
> related_name="events_subscribed")
>
> }}}
>
> when trying to add and migrate notify_subscriptions field I get an
> `django.db.utils.IntegrityError: (1215, 'Cannot add foreign key
> constraint')` error. When adding
>
> {{{
>
> 'OPTIONS': {
> "init_command": "SET foreign_key_checks = 0;",
> },
> }}}
>
> to database settings , the error becames:
> `django.db.utils.OperationalError: (1825, "Failed to add the foreign key
> constraint on table 'levan_liveevent_notify_subscriptions'. Incorrect
> options in FOREIGN KEY constraint
> 'slipmat/levan_liveevent_noti_liveevent_id_a4871abc_fk_levan_liveevent_id'")`
>
> the migration file looks like:
>
> {{{
>
> operations = [
> migrations.AddField(
> model_name='liveevent',
> name='notify_subscriptions',
> field=models.ManyToManyField(blank=True,
> related_name='events_subscribed', to=settings.AUTH_USER_MODEL),
> ),
> ]
>
> }}}
>
> I'm using MySQL version 5.6.27 and Django version 1.9.7
New description:
I have a model that looks like
{{{#!python
class LiveEvent(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4,
editable=False)
...
attendees = models.ManyToManyField(
User, blank=True, related_name="events_attended"
)
...
notify_subscriptions = models.ManyToManyField(
User, blank=True, related_name="events_subscribed"
)
}}}
when trying to add and migrate notify_subscriptions field I get the
following error:
{{{
django.db.utils.IntegrityError: (1215, 'Cannot add foreign key
constraint')`
}}}
When adding
{{{#!python
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
},
}}}
to database settings , the error became:
{{{
django.db.utils.OperationalError: (1825, "Failed to add the foreign key
constraint on table 'levan_liveevent_notify_subscriptions'. Incorrect
options in FOREIGN KEY constraint
'slipmat/levan_liveevent_noti_liveevent_id_a4871abc_fk_levan_liveevent_id'")
}}}
the migration file looks like:
{{{#!python
operations = [
migrations.AddField(
model_name='liveevent',
name='notify_subscriptions',
field=models.ManyToManyField(
blank=True, related_name='events_subscribed',
to=settings.AUTH_USER_MODEL
),
),
]
}}}
I'm using MySQL version 5.6.27 and Django version 1.9.7
--
Comment:
I just tried reproducing against Django 1.9.7 with no success.
Please re-open the ticket by answering these two questions:
1. Are both of your tables using the InnoDB engine? Foreign keys are not
supported on MyISAM.
2. Are you using a custom user model which you didn't provide the
definition?
--
Ticket URL: <https://code.djangoproject.com/ticket/26777#comment:1>
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/064.be8e3e8a3eaf765a3c4c8e11552f3620%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.