#33019: makemigrations produces invalid import path in migration file --------------------------------+-------------------------------------- Reporter: zepx | Owner: nobody Type: Bug | Status: new Component: Migrations | Version: 3.2 Severity: Normal | Resolution: Keywords: makemigrations | Triage Stage: Unreviewed Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 --------------------------------+-------------------------------------- Description changed by zepx:
Old description: > This issue is somewhat similar to > https://code.djangoproject.com/ticket/27914 with a slightly different > problem. > > If you define an inner class in the `django.db.models.Model` subclass, > `makemigrations` will produce an invalid import path resulting in import > error. > > Specifically, if we have the following structure in our `models.py`, > > {{{#!python > from django.db import models > > class OuterClass(models.Model): > class InnerField(models.CharField): > pass > > outer_field = InnerField(max_length=100) > }}} > > the generated migration file would produce > > {{{#!python > # Generated by Django 3.2.6 on 2021-08-13 03:39 > > from django.db import migrations, models > import test1.models.OuterClass > > class Migration(migrations.Migration): > > initial = True > > dependencies = [ > ] > > operations = [ > migrations.CreateModel( > name='OuterClass', > fields=[ > ('id', models.BigAutoField(auto_created=True, > primary_key=True, serialize=False, verbose_name='ID')), > ('outer_field', > test1.models.OuterClass.InnerField(max_length=100)), > ], > ), > ] > }}} > > Notice that the import path at the top refers to an import of a class. > This is an invalid import format. > > {{{#!python > import test1.models.OuterClass > }}} > > Further usage of `manage.py migrate` will result in errors: > > {{{#!python > ModuleNotFoundError: No module named 'test1.models.OuterClass'; > 'test1.models' is not a package > }}} New description: This issue is somewhat similar to https://code.djangoproject.com/ticket/27914 with a slightly different problem. If you define an inner class in the `django.db.models.Model` subclass, `makemigrations` will produce an invalid import path resulting in import error. Specifically, if we have the following structure in our `models.py`, {{{#!python from django.db import models class OuterClass(models.Model): class InnerField(models.CharField): pass outer_field = InnerField(max_length=100) }}} the generated migration file would produce {{{#!python # Generated by Django 3.2.6 on 2021-08-13 03:39 from django.db import migrations, models import test1.models.OuterClass class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='OuterClass', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('outer_field', test1.models.OuterClass.InnerField(max_length=100)), ], ), ] }}} Notice that the import path at the top refers to an import of a class. This is an invalid import format. {{{#!python import test1.models.OuterClass }}} Further usage of `manage.py migrate` will result in errors: {{{#!python ModuleNotFoundError: No module named 'test1.models.OuterClass'; 'test1.models' is not a package }}} If we change the import to {{{#!python import test1.models }}} the migration file will work accordingly. -- -- Ticket URL: <https://code.djangoproject.com/ticket/33019#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 django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/062.53cd622e7f380db738a0b8de6d6f86ba%40djangoproject.com.