Python 重命名应用程序后进行迁移时出现Django错误
我在Django项目中工作,在体系结构中遇到了错误 我正在尝试在自己的软件包中设置模型。然而,我的应用程序不断给我错误 在我将模型移动到自己的包中并为每个类创建一个文件之前,一切都正常 现在,每当我尝试运行Python 重命名应用程序后进行迁移时出现Django错误,python,django,Python,Django,我在Django项目中工作,在体系结构中遇到了错误 我正在尝试在自己的软件包中设置模型。然而,我的应用程序不断给我错误 在我将模型移动到自己的包中并为每个类创建一个文件之前,一切都正常 现在,每当我尝试运行makemigrations,都会出现以下错误: ValueError: Unhandled pending operations for models: model.state (referred to by fields: testadmin.Member.state, testad
makemigrations
,都会出现以下错误:
ValueError: Unhandled pending operations for models:
model.state (referred to by fields: testadmin.Member.state, testadmin.Organization.state)
我在migration命令中添加了models应用程序,它在某种程度上起了作用--python./manage.py makemigrations models
。然而,现在我有了这个新的错误。出于某种原因,迁移无法识别状态
模型
SystemCheckError: System check identified some issues: ERRORS:
models.Member.state: (fields.E300) Field defines a relation with model 'State', which is either not installed, or is abstract.
models.Organization.state: (fields.E300) Field defines a relation with model 'State', which is either not installed, or is abstract
您已重命名应用程序,但未重命名表 Django将模型的表名构造为
,以处理这些更改:
表的重命名。你可以用它
class Migration(migrations.Migration):
# ...
operations = [
AlterModelTable('<old-app-name>_modelname', '<new-app-name>_modelname'),
# ...
]
def rename_migrations_forwards(apps, schema_editor):
MigrationRecorder.Migration.objects.filter(app='<old-app-name>').update(app='<new-app-name>')
def rename_migrations_reverse(apps, schema_editor):
MigrationRecorder.Migration.objects.filter(app='<new-app-name>').update(app='<old-app-name>')
class Migration(migrations.Migration):
# ...
operations = [
# ...
migrations.RunPython(
rename_migrations_forwards,
rename_migrations_reverse,
),
]
如果在模型元中重写,则可以跳过表的重命名。但是,您不能跳过迁移的重命名。您重命名了应用程序,但没有重命名表
Django将模型的表名构造为,以处理这些更改:
表的重命名。你可以用它
class Migration(migrations.Migration):
# ...
operations = [
AlterModelTable('<old-app-name>_modelname', '<new-app-name>_modelname'),
# ...
]
def rename_migrations_forwards(apps, schema_editor):
MigrationRecorder.Migration.objects.filter(app='<old-app-name>').update(app='<new-app-name>')
def rename_migrations_reverse(apps, schema_editor):
MigrationRecorder.Migration.objects.filter(app='<new-app-name>').update(app='<old-app-name>')
class Migration(migrations.Migration):
# ...
operations = [
# ...
migrations.RunPython(
rename_migrations_forwards,
rename_migrations_reverse,
),
]
如果在模型元中重写,则可以跳过表的重命名。但是,您不能跳过迁移的重命名。您到底是如何移动模型(和迁移)的?您知道:Django创建的表的名称格式为“app_model”。如果您更改了应用程序名称,那么Django期望的表名称也会更改。顺便说一句:完整的回溯并不总是有用的,但是发布它也不会有什么坏处;)您能添加您的型号.py
代码供我们查看吗?很可能是关系破裂导致了这个错误。@SoFLy我把所有的模型都放在自己的目录文件中,Django对命名和结构很讲究。如果您已将所有模型移动到模型目录中,则无法正常工作。模型需要存在于某个app/Models.py中,而不是其他任何地方。您是如何移动模型(以及迁移)的?您知道:Django创建的表的名称格式为“app_model”。如果您更改了应用程序名称,那么Django期望的表名称也会更改。顺便说一句:完整的回溯并不总是有用的,但是发布它也不会有什么坏处;)您能添加您的型号.py
代码供我们查看吗?很可能是关系破裂导致了这个错误。@SoFLy我把所有的模型都放在自己的目录文件中,Django对命名和结构很讲究。如果您已将所有模型移动到模型目录中,则无法正常工作。模型需要存在于someapp/Models.py中,而不是其他任何地方。我使用元函数在代码中更改了数据库表名。这个问题与它认为国家已经被删除或其他什么有关。我不确定-数据库是否也跟踪迁移?它可以存储在那个里吗?@Jeremeylewallen:我不知道“状态”是什么,但是是的:迁移是在数据库中跟踪的(Django就是这样知道它们是否已经运行的)@Jeremeylewallen:那些字段定义了与模型的关系…
错误是关于相关字段的(多对多)AlterModelTable
将处理这些问题。我使用meta函数在代码中更改了我的数据库表名称。这个问题与它认为国家已经被删除或其他什么有关。我不确定-数据库是否也跟踪迁移?它可以存储在那个里吗?@Jeremeylewallen:我不知道“状态”是什么,但是是的:迁移是在数据库中跟踪的(Django就是这样知道它们是否已经运行的)@Jeremeylewallen:那些字段定义了与模型的关系…
错误是关于相关字段的(多对多)AlterModelTable
将处理这些问题