﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
24447	Migrations do not execute create_fk_sql() when adding a foreign key to a field	Jean-Louis Fuchs	nobody	"Migrations failed when introducing foreign keys on existing fields. 

Pull request: https://github.com/django/django/pull/4235
Branch with fix: https://github.com/ganwell/django/tree/master_missing_create_fk_sql
Branch with unittest but no fix: https://github.com/ganwell/django/tree/master_missing_create_fk_sql_fail

Consider following model:

{{{
class ForeignKeyTest(models.Model):
    id = models.AutoField(primary_key=True)
    customer = models.IntegerField()

class Customer(models.Model):
    id = models.AutoField(primary_key=True)
}}}

Then it gets migrated to this:

{{{
class ForeignKeyTest(models.Model):
    id = models.AutoField(primary_key=True)
    customer = models.ForeignKey('Customer')

class Customer(models.Model):
    id = models.AutoField(primary_key=True)
}}}

The second migration won't create the foreign key. This does not fail with sqlite! Because these migrations are handled differently. It will fail with MySQL and probably Postgres too. I wrote a unittest and tested it with MySQL: master_missing_create_fk_sql_fail fails and master_missing_create_fk_sql is ok.

The code didn't detect this case - if old_field.rel doesn't exist alter_field() must always create the foreign key and ONLY if .rel exists it must check .db_constraint, too. Since no .rel also means there was no foreign key before.

I will of course redo the pull request to get clean history. I also fixed this in 1.7."	Bug	new	Migrations	master	Normal				Unreviewed	1	0	0		0	0
