#24264: foreign key constraint error migrating integer pk to CharField ----------------------------+------------------------------------- Reporter: timgraham | Owner: nobody Type: Bug | Status: new Component: Migrations | Version: 1.8alpha1 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 MarkusH): I looked into the issue: it is neither related nor unrelated to the bisected commit mentioned above. The problem is that in [https://github.com/django/django/blob/38c17871bb6dafd489367f6fe8bc56199223adb8/django/db/backends/base/schema.py#L520 django.db.backends.base.schema._alter_field()] `new_field.model._meta.related_objects` for `DjangoHero` is an empty list despite `Donation` having a FK. The [https://github.com/django/django/blob/38c17871bb6dafd489367f6fe8bc56199223adb8/django/db/models/options.py#L685 related_objects_graph] after the first `for` loop looks like: {{{ {<Options for DjangoHero>: [<django.db.models.fields.related.ForeignKey: donor>], <Options for Site>: [<django.db.models.fields.related.ForeignKey: site>, <django.db.models.fields.related.ManyToManyField: sites>], <Options for FlatPage>: [<django.db.models.fields.related.ForeignKey: flatpage>], <Options for DocumentRelease>: [<django.db.models.fields.related.ForeignKey: release>], <Options for Category>: [<django.db.models.fields.related.ForeignKey: category>, <django.db.models.fields.related.ForeignKey: category>, <django.db.models.fields.related.ForeignKey: category>, <django.db.models.fields.related.ForeignKey: category>], <Options for ContentType>: [<django.db.models.fields.related.ForeignKey: content_type>], <Options for CCLA>: [<django.db.models.fields.related.ForeignKey: ccla>], <Options for ICLA>: [<django.db.models.fields.related.ForeignKey: icla>], <Options for Group>: [<django.db.models.fields.related.ForeignKey: group>, <django.db.models.fields.related.ForeignKey: group>, <django.db.models.fields.related.ManyToManyField: groups>], <Options for Permission>: [<django.db.models.fields.related.ForeignKey: permission>, <django.db.models.fields.related.ManyToManyField: user_permissions>], <Options for User>: [<django.db.models.fields.related.ForeignKey: user>, <django.db.models.fields.related.ForeignKey: user>, <django.db.models.fields.related.ForeignKey: user>, <django.db.models.fields.related.ForeignKey: user>], <Options for Permission>: [<django.db.models.fields.related.ForeignKey: permission>, <django.db.models.fields.related.ManyToManyField: permissions>], <Options for FeedType>: [<django.db.models.fields.related.ForeignKey: feed_type>], <Options for Feed>: [<django.db.models.fields.related.ForeignKey: feed>], <Options for User>: [<django.db.models.fields.related.OneToOneField: user>, <django.db.models.fields.related.ForeignKey: user>, <django.db.models.fields.related.ForeignKey: owner>], <Options for ContentType>: [<django.db.models.fields.related.ForeignKey: content_type>, <django.db.models.fields.related.ForeignKey: content_type>]} }}} However, due to state changes during migrations `self.model` (`new_field.model._meta.model`) is not the same instance as the `DjangoHero` model from [https://github.com/django/django/blob/38c17871bb6dafd489367f6fe8bc56199223adb8/django/db/models/options.py#L687 all_models()] -- Ticket URL: <https://code.djangoproject.com/ticket/24264#comment:2> 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 django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/067.758cab34ed3d4e7d36c3c67d709646fa%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.