Opened 3 years ago

Last modified 3 years ago

#33019 closed Bug

makemigrations produces invalid import path in migration file — at Initial Version

Reported by: Choong Jun Jin Owned by: nobody
Component: Migrations Version: 3.2
Severity: Normal Keywords: makemigrations
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

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,

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

# 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.

import test1.models.OuterClass

Further usage of manage.py migrate will result in errors:

ModuleNotFoundError: No module named 'test1.models.OuterClass'; 'test1.models' is not a package

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top