#33019: makemigrations produces invalid import path in migration file
--------------------------------------+--------------------------------
               Reporter:  zepx        |          Owner:  nobody
                   Type:  Bug         |         Status:  new
              Component:  Migrations  |        Version:  3.2
               Severity:  Normal      |       Keywords:  makemigrations
           Triage Stage:  Unreviewed  |      Has patch:  0
    Needs documentation:  0           |    Needs tests:  0
Patch needs improvement:  0           |  Easy pickings:  0
                  UI/UX:  0           |
--------------------------------------+--------------------------------
 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
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33019>
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/047.654cbd4c74855d7bd08652683e7e9a0f%40djangoproject.com.

Reply via email to